Ответ 1
Ваш enctype
немного некорректен, он должен быть multipart/form-data
вместо multipart/formdata
.
Я рассмотрел много ответов на этот же вопрос, но пока не нашел рабочего решения. Я пытаюсь сделать веб-приложение, чтобы вы могли загружать файлы с помощью express и multer, и у меня возникла проблема с тем, что файлы не загружаются, а req.file всегда undefined.
Мой код ниже
'use strict';
var express = require('express');
var path = require('path');
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
var app = express();
require('dotenv').load();
app.use(express.static(path.join(__dirname, 'main')));
app.post('/upload', upload.single('upl'), function (req, res, next) {
// req.file is the `avatar` file
// req.body will hold the text fields, if there were any
console.log(req.file);
res.status(204).end();
})
var port = process.env.PORT || 8080;
app.listen(port, function () {
console.log('Node.js listening on port ' + port + '...');
});
Форма
<form class="uploadForm" action="/upload" method="post" enctype="multipart/formdata">
<label class="control-label">Select File</label>
<input name="upl" id="input-1" type="file" class="file">
<input type="submit" value="submit" />
</form>
Помогите очень ценить, это сводит меня с ума.
Ваш enctype
немного некорректен, он должен быть multipart/form-data
вместо multipart/formdata
.
В случае почтальона, попробуйте следующее:
Это может решить проблему. Каждый раз, когда вы перезапускаете сервер, вам нужно сделать выше шагов для повторного вызова API. Причина, по которой multer отправляет обратно куки, называемые connect.sid, клиенту, которые могут потребоваться при дальнейшей связи. Использование старых файлов cookie не будет загружать файл.
Я положил MY (есть много, я представляю и, безусловно, лучше) решение, чтобы помочь многим людям, таким как я, потому что я искал в течение одного целого дня; - (
//JS file on node side
var express = require('express');
var fileUpload = require('express-fileupload');
var fs = require("fs");
var app = express();
console.log('étape 0');
app.use(express.static('mesStatic'));
app.use(fileUpload());
console.log('étape 1');
app.get('/indexFileUpload.htm', function (req, res) {
res.sendFile( __dirname + "/" + "indexFileUpload.htm" );
})
console.log('étape 2');
app.post('/file_upload', function (req, res) {
console.log('étape 3');
console.log('req.files:' , req.files);
if (!req.files) {
res.send('No files to upload.');
return;
}
console.log('req.files.file.data:' , req.files.file.data);
var bufDataFile = new Buffer(req.files.file.data, "utf-8");
console.log('étape 3.1');
console.log('__dirname : ' + __dirname);
fs.writeFile(__dirname + '/file_upload/output.txt', bufDataFile, function(err) {
if (err) {
return console.error(err);
}
else {
console.log("Data written successfully !");
}
console.log('étape 4');
res.end('Fin OK !!!');
})
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port);
})
HTML файл,
<form class="uploadForm" action="/upload" method="post" enctype="multipart/form-data">
<label class="control-label">Select File</label>
<input name="upl" id="input-1" type="file" class="file">
<input type="submit" value="submit" />
</form>
app.js
var express=require("express");
var multer=require("multer");
var app=express();
var upload=multer({dest:"uploads/"});
app.post("/upload",upload.single("upl"),function(req,res){
console.log("Uploaded Successfull with filename : "+req.upl.filename);
});
Да, ваш enctype
ошибочен, и это единственная проблема. Убедитесь, что вы исправили свой enctype, иначе вы, скорее всего, получите undefined в req.file или req.files.