javascript - node - save file express
multer-req.file siempre indefinido (5)
He visto muchas respuestas para esta misma pregunta, pero aún no he encontrado una solución de trabajo. Estoy tratando de crear una aplicación web a la que puedas subir archivos usando express y multer, y estoy teniendo un problema con el hecho de que no se están cargando archivos y que el archivo req siempre está indefinido.
Mi código a continuación
''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 + ''...'');
});
La forma
<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>
Ayuda muy apreciada, esto me está volviendo loco.
En el caso del cartero, intente lo siguiente:
- Cierre la pestaña del cartero para la API
- Abre una nueva pestaña de nuevo
- Reconstruye la solicitud API y luego envíala.
Esto puede solucionar el problema. Cada vez que reinicie el servidor, debe realizar los pasos anteriores para llamar nuevamente a la API. La razón por la que Multer envía de vuelta algunas cookies llamadas connect.sid al cliente que pueden requerirse en futuras comunicaciones. El uso de cookies antiguas no cargará el archivo.
Puse mi solución (hay muchas imagino y seguramente mejor) para ayudar a muchas personas como yo porque he buscado durante 1 día completo ;-(
//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);
})
Sí, su enctype
está mal y ese es el único problema. Asegúrese de corregir su enctype; de lo contrario, es probable que quede indefinido en los archivos de solicitud o de solicitud.
Su enctype
es ligeramente incorrecto, debe ser multipart/form-data
lugar de multipart/formdata
.
Archivo 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);
});