Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Upload de arquivo

Estou tendo problemas para fazer o upload de arquivos com mais de 2Mb, usando o express.js , abaixo está mensagem e código do curso:

<pre>PayloadTooLargeError: request entity too large
    <br> &nbsp; &nbsp;at readStream (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\raw-body\index.js:155:17)
    <br> &nbsp; &nbsp;at getRawBody (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\raw-body\index.js:108:12)
    <br> &nbsp; &nbsp;at read (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\body-parser\lib\read.js:77:3)
    <br> &nbsp; &nbsp;at urlencodedParser (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\body-parser\lib\types\urlencoded.js:116:5)
    <br> &nbsp; &nbsp;at Layer.handle [as handle_request] (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\layer.js:95:5)
    <br> &nbsp; &nbsp;at trim_prefix (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\index.js:317:13)
    <br> &nbsp; &nbsp;at E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\index.js:284:7
    <br> &nbsp; &nbsp;at Function.process_params (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\index.js:335:12)
    <br> &nbsp; &nbsp;at next (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\index.js:275:10)
    <br> &nbsp; &nbsp;at expressInit (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\middleware\init.js:40:5)
    <br> &nbsp; &nbsp;at Layer.handle [as handle_request] (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\layer.js:95:5)
    <br> &nbsp; &nbsp;at trim_prefix (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\index.js:317:13)
    <br> &nbsp; &nbsp;at E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\index.js:284:7
    <br> &nbsp; &nbsp;at Function.process_params (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\index.js:335:12)
    <br> &nbsp; &nbsp;at next (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\router\index.js:275:10)
    <br> &nbsp; &nbsp;at query (E:\Estudo\sources\nodejs\alura-nodejs-rest\payfast\node_modules\express\lib\middleware\query.js:45:5)
</pre>

custom-express.js

   /**
    * use content-type: application/json
    */
   app.use(bodyParser.json({limit: '50mb'}));
   app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

upload.js

var fs = require('fs');
var _app = null;
module.exports = function (app) {
   _app = app;
   _app.post("/upload", _upload);
}

function _upload(req, res) {
   console.log('receiving image');

   var filename = req.headers.filename;
   req.pipe(fs.createWriteStream('files/' + filename))
      .on('finish',
         function () {
            res.status(201).send('ok');
         });
}
3 respostas

Fala aí Diogo, beleza? Para realizar upload de arquivos, recomendo utilizar o mult. Configure ele junto ao Express:

const multer = require("multer");
const upload = multer({dest : DIRETORIO});

app.use(multer({dest : DIRETORIO}).any());

E depois é só usá-lo, segue abaixo um exemplo de upload que fiz:

upload : (req, res) => {
    req.files.forEach(file => {
        let nomeSlug = slug(file.originalname.substring(0,, file.originalname.indexOf("."))).toLowerCase() + file.originalname.substring(file.originalname.indexOf("."))
        arquivo.create({
            nome : file.originalname,
            slug : nomeSlug,
        }).then(() => {
            fs.readFile(file.path, (erro, dados) => {
                if (erro) {
                    console.log(erro);
                    throw erro;
                            }
                let destino = pathModule.join(file.destination, nomeSlug);
                            let stream = fs.createWriteStream(destino);
                            stream.write(dados);
                            stream.end();
                            fs.unlink(file.path);
            });
                }).catch(error => {
            console.log(error);
            res.status(500).json(error);
        });
    });
    res.status(201).end();
}

Espero ter ajudado.

Opa Diego!

O multer já ví funcionando! A idéia era entender porque o que foi demonstrado no curso de rest com node.js, este erro não ocorre e comigo ocorreu.

No mais, obrigado pela ajuda.

Abraços.

solução!

Você utilizou as mesmas lib's e versões? As vezes foi alguma mudança nas versões mais novas, eles adicionaram um limite máximo de arquivo para não demorar tanto (apenas um chute).

No mais, se o seu problema foi solucionado, marque a dúvida como solucionada.