Używam Multer do przesyłania zdjęć w Express 4. Jednak wszystkie przykłady pokazują, że Multer jest zdefiniowany w pliku ekspresowym jako Middleware. Chciałbym zdefiniować niektóre zachowania Multera w moim routingu aplikacji. czy to możliwe? Końcowy wynik, którego potrzebuję, to funkcja rozpoznawania przez moją trasę, kiedy przesyłanie zostanie zakończone, zanim wyśle odpowiedź serwera do przeglądarki, aby obraz mógł być wyświetlony użytkownikowi (w tej chwili wyświetlany jest tylko częściowo wyświetlany obraz, ponieważ plik jeszcze się nie zakończył).Użyj Multer w Express Route? (Używając MEANJS)
AKTUALNE, pracując KOD
express.js
// Require Multer as module dependency.
var multer = require('multer');
// Using Multer for file uploads.
app.use(multer({
dest: './public/profile/img/',
limits: {
fieldNameSize: 50,
files: 1,
fields: 5,
fileSize: 1024 * 1024
},
rename: function(fieldname, filename) {
return filename;
},
onFileUploadStart: function(file) {
if(file.mimetype !== 'image/jpg' && file.mimetype !== 'image/jpeg' && file.mimetype !== 'image/png') {
return false;
}
}
}));
server_routes.js
app.route('/users/image').post(server_controller_file.imageUpload);
server_controller_file.js
exports.imageUpload = function(req, res) {
// Check to make sure req.files contains a file, mimetypes match, etc., then send appropriate server response.
};
Idealnie mój plik server_controller_file.js zawierałby pewne kontrole, aby upewnić się, że plik został zakończony, np. (Uwaga: jest to hipotetyczna/pożądane, a nie rzeczywisty kod roboczy) ...
var multer = require('multer');
exports.imageUpload = function(req, res) {
multer({
onFileUploadComplete: function(file) {
res.send();
}
});
}
Ponownie, teraz charakter asynchroniczny węzła powoduje przeglądarkę myśleć zakończeniu wysyłania tak szybko, jak to odbiera pomyślna odpowiedź, więc gdy aktualizuję adres URL do wyświetlania obrazu, wyświetla się on tylko częściowo. Dzięki za pomoc!
Czy można uzyskać 'plik.path' w funkcji onFileUploadComplete? –
Ponieważ 'multer' działa jako Middleware, myślę, że nie działałby on w twoim pliku_controlera_serwera. Nie wiesz kiedy zakończył się przesyłanie pliku. Zobacz ten przykład: http: //codeforgeek.com/2014/11/file-uploads-using-node-js/ –
@RyanYiada Mogę uzyskać dostęp do pliku.ścieżka w funkcji onFileUploadComplete, ale nadal nie komunikuje się z routerem. Artykuł, z którym się łączyłeś, był dobry - zawiera zmienną "done", która dotyczy zarówno oprogramowania pośredniego, jak i routera, ale ponieważ moje oprogramowanie pośrednie i router znajdują się w oddzielnych plikach, moje zmienne oprogramowania pośredniego są poza zasięgiem routera. – aikorei