Я использую multer
для загрузки файлов на сервер. Все работает нормально, за исключением одной проблемы, которая фактически упоминается в документации multer
. Вот отрывок:Использование объекта хранения Multer
«Обратите внимание, что
req.body
, возможно, не были полностью не заселен» (то есть, когда функция объекта имя файла для хранения называется я думаю ...). «Это зависит от того, что клиент передает поля и файлы на сервер»
Это именно то, где моя проблема. Я проверил, что req.body.ID
делает его сервером, но он заполняется после того, как multer
определяет имя файла.
Есть ли у кого-нибудь предложения по решению этой проблемы? Вот мои фрагменты кода (имя файла заканчивается время "Не определено" с правильным расширением JPG):
//Storage object
var storage = multer.diskStorage({
destination: './uploaded',
filename: function(req, res, cb) {
cb(null, req.body.ID + '.jpg')
}
});
//File Upload Handle
router.post('/file-upload', upload.single('image'), function(req, res, next) {
console.log("routes module-/file-upload " + req.body.ID); // The file ID gets transmitted
res.sendStatus(201);
});
Вот мой HTML:
<form id="fileForm" enctype="multipart/form-data" >
<div class="form-group">
<input id='name' name="name" placeholder="ID" class="form-control-label">
</div>
<div class="form-group" align="center">
<input type="file" id="file" name="image">
</div>
<button type="submit" class="btn btn-warning" value="Upload">Upload</button>
</form>
и фронтального AJAX:
//Testing Files Uploads
$("#fileForm").on('submit', function(event) {
event.preventDefault();
var formData = new FormData(this);
var fileID = $('#name').val();
formData.append("ID", fileID);
$.ajax('/file-upload', {
type: 'POST',
data: formData,
processData: false,
contentType: false,
})
.done(function(item) {
console.log('Uploaded!');
})
.error(function() {
console.log('doesnt work!')
});
});
//End of Files Uploads
Вы можете добавить, как выглядит ваша форма представления на стороне клиента (особенно форма HTML, если вы используете это). – mscdex
Хорошее предложение, спасибо, форма HTML довольно проста, добавив его сейчас – pastrop
@pastrop: Не могли бы вы также опубликовать, как вы назначаете объект хранения выше, чтобы обманывать? например: var upload = multer ({storage: storage}); app.post ('/ profile', upload.single ('uploadedFile'), функция ( – pkamathk