multer / node文件上传非常适合<20kb的文件,挂在20kb-1mb的文件上,对于> 1mb的文件返回502错误

我正在一个简单的文件上传站点上工作,一直无法连续上传文件而没有错误。当要上传的文件小于〜20kb时,我现在拥有的代码可以完美运行,但是对于大于该文件但小于〜1mb的文件,仅上载约〜20kb的文件(从而损坏了文件)。 >

对于大于1mb的文件,上传完全失败,并返回502错误。我已经确定增加multer文件大小/字段大小限制,并且永远不会收到文件太大的错误。

当上传的文件介于〜20kb-1mb之间时,没有前端或后端错误,但是multer似乎在上载​​时“挂起”,并且从未达到上载回调函数。

编辑我删除了前端代码,因为这似乎是节点/配置错误

app.js文件(已删除无关代码)

const express    = require('express');
const multer     = require('multer');
const path       = require('path');
const bodyParser = require('body-parser');
const glob       = require('glob');
const fs         = require('fs');

const app  = express();
const PORT = process.env.PORT || 3000;

const storage = multer.diskStorage({
    destination: function(req,file,callback) { callback(null,'./public/file') },filename: function(req,req.fileCode + '-' + file.originalname) },});

const upload = multer({storage: storage,limits: {fileSize: 1024 * 1024 * 1024,fieldSize: 10000000000}}).single('selectedFile');



app.use(bodyParser.json({ limit: '5mb',extended: true })); //added from user suggestions
app.use(bodyParser.urlencoded({ limit: '5mb',extended: true }));

app.use(express.static(path.join(__dirname,'public','media','styles.css')));
app.use(express.static(path.join(__dirname,'scripts.js')));

app.get(["/","/index.html.var"],(req,res) => {
    res.sendFile(path.join(__dirname,'index.html'));
});

app.post('/upload-file',function(req,res) {
    let fileCode = genFileCode();

    glob("**/public/file/" + fileCode + "*.*",function (err,files) {
        if(files[0])
            fileCode = genFileCode();

        req.fileCode = fileCode;

        console.log("check 1");

        upload(req,res,function(e) {
            console.log("check 2");

            if(e)
                console.log("error " + e);
            else
                console.log("no error");
        });

        res.send(fileCode);
    });  
});

multer / node文件上传非常适合<20kb的文件,挂在20kb-1mb的文件上,对于> 1mb的文件返回502错误

^^完全相同的文件(〜370kb)被多次上传,所有文件的大小都不相同,都不是完整文件(所有文件均已损坏)

multer / node文件上传非常适合<20kb的文件,挂在20kb-1mb的文件上,对于> 1mb的文件返回502错误

上传任何大于〜1mb的文件时,会导致

^^ 502错误

zhansir720 回答:multer / node文件上传非常适合<20kb的文件,挂在20kb-1mb的文件上,对于> 1mb的文件返回502错误

您的代码似乎不错。

尝试更改这两行

const upload = multer({storage: storage,limits: {fileSize: 5MB,fieldSize: 5MB}}).single('selectedFile');

我正在更改建议。保留上一个,然后尝试下一个。 希望能锻炼身体。

,

您的正文解析限制似乎在后端小于1 MB。 将以下行更改为服务器配置文件:

app.use(bodyParser.json({limit:'5mb',extended:true}))

app.use(bodyParser.urlencoded({limit:'5mb',extended:true}))

您可以根据自己的条件设置限制。

,

如果有人偶然发现了这种错误,并且处于我所处的相同情况,我已经弄清楚了我的错误:

upload(req,res,function(e) {
        console.log("check 2");

        if(e)
            console.log("error " + e);
        else
            console.log("no error");
    });

    res.send(fileCode);

在这里,app.js似乎在上传回调之前 发送了响应,并过早结束了文件上传。将res.send放在回调中似乎已经解决了所有问题

本文链接:https://www.f2er.com/3168616.html

大家都在问