Traté de cargar un archivo de imagen desde el lado del cliente a mi servidor de almacenamiento AWS S3 usando multer con el soporte de multer-s3. Sin embargo, sigo obteniendo un resultado indefinido para mi llamada req.file. He estado buscando en Google y he comprobado todas las posibles causas de mi problema y hasta ahora no he tenido suerte. Espero que alguien pueda ayudarme aquí. Gracias por adelantado.
Código HTML del lado del cliente:
<form method="post" enctype="multipart/form-data" action="/create"> <input type="text" name="name" /> <input type="text" name="topic" /> <input type="file" name="image" /> <input type="submit" value="Upload" /> </form>Código del lado del servidor:
var express = require('express'); var http = require('http'); var app = express(); var methodOverride = require('method-override'); var bodyParser = require('body-parser'); var multer = require('multer'); var multerS3 = require('multer-s3'); var AWS = require('aws-sdk'); app.use(methodOverride()); app.use(bodyParser.urlencoded({ extended: true })); //Create S3 client var s3 = new AWS.S3(); //this code is copy directly from multer-s3 since I don't care about my file name shown on S3 for now var upload = multer({ storage: multerS3({ s3: s3, bucket: mybuckname, metadata: function (req, file, cb) { cb(null, {fieldName: file.fieldname}); }, key: function (req, file, cb) { cb(null, Date.now().toString()) } }) }); app.post('/create', upload.single('image'), function(req, res) { var nameField = req.body.name, topicField = req.body.topic; console.log("File: ", req.file); console.log("Name: ", nameField); console.log("Topic: ", topicField); res.sendStatus(200); res.end(); });He probado lo siguiente:
después de una larga lucha cambiando entre multer y ayudante de camarero y nada funciona. De repente, me di cuenta de que mi formulario en realidad está usando un elemento de polímero 'es = "forma de hierro"' que mi error no escribió en mi publicación original como se muestra a continuación. Después de eliminarlo, la carga de mi archivo funciona en multer; estoy seguro de que también funcionará en busboy.
<form is="iron-form" method="post" enctype="multipart/form-data" action="/create">Los elementos poliméricos siempre me crean problemas en el pasado. Pero no me malinterpretes, es un gran proyecto con muchas cosas geniales disponibles para diseñar tu página. Pero debe comprender realmente cómo usar esos elementos para aprovecharlos. En mi caso, aprendo de mi lección y espero poder compartirla contigo.