当前位置: 首页 > 知识库问答 >
问题:

Multer/Node文件上载对于1MB的文件返回502错误

贺卜霸
2023-03-14

我正在工作一个简单的文件上传网站,一直有麻烦坚持上传文件没有错误。我现在拥有的代码在一个要上传的文件小于~20KB时可以完美地工作,但是对于大于这个值但小于~1MB的文件,只上传了大约~20KB的文件(从而破坏了文件)。

对于大于1MB的文件,上载完全失败并返回502错误。我已经确定要增加multer FileSize/FieldSize限制,并且永远不会收到文件太大的错误。

当一个在~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, file, callback) { callback(null, 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, 'public', 'media', 'scripts.js')));

app.get(["/","/index.html.var"], (req, res) => {
    res.sendFile(path.join(__dirname, 'public', '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);
    });  
});

^^502上载大于~1MB的任何文件时会出现错误

共有2个答案

上官鸿朗
2023-03-14

我已经发现了我的错误,如果有人偶然发现了这一点,并且处于与我相同的情况:

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放置在回调中似乎已经解决了所有问题

费和惬
2023-03-14

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

app.use(bodyParser.json({limit:“5MB”,extended:true}))

app.use(BodyParser.URlenCoded({Limit:“5MB”,Extended:true}))

你可以根据你的标准设定限制。

 类似资料:
  • 我有一个网站和CMS建立在Laravel 5.1之上。大于1mb的文件图像没有被上传,并给我错误500。但是当我将相同的图像缩放到200kb或400kb时,它上传时没有任何问题。我还更新了upload_max_filesize=70M、post_max_size=100M和memory_limit=32M的php.ini设置

  • 我正在创建一个简单的应用程序,作为Ionic2的学习体验,它连接到运行multer的节点服务器上传图像。我遇到的问题是,我需要从multer获得最后的文件名回到上传它的应用程序,以保存它在本地。我使用@Ionic/Cloud-Angular中的Auth和User模块进行身份验证和用户信息。User对象有一个details对象,其中包含“name”、“email”、“username”、“image

  • 我正在尝试重命名一个与multer上传的图像文件的请求参数。 下面是我的代码: 它的工作很好,但我想知道它是否存在一些更干净和更容易与multer重命名功能。 它已经尝试过这样的事情: 但它不起作用,因为req尚未填充(未定义)。 我使用httpie使用以下命令测试我的代码: 有没有可能使用multer的重命名功能来做我用FS做的事情?还是有更好的办法? 谢谢你的反馈。 托玛斯 编辑 使用Disk

  • 我将multer添加到我的node js应用程序中,它工作得很好,只是我需要存储在db中的图像的路径不正确。找不到问题所在,显然是我犯了个愚蠢的错误。 这是我为multer做的准备 下面是我如何使用它来存储路径 你可以从这里看到路径不对,我不能在GET上使用它

  • 我有一个express应用程序,正在使用multer上传文件,问题是当我在生产服务器上用PM2运行该应用程序时,multer上传文件给了我一个错误:

  • 是否可以上传两个不同的文件(不同的扩展名)到不同的文件夹使用multer+node js。multer(1.3.0)。 我得到一个错误:“意外的字段” }); 下面我检查图像和封面 我正在使用邮递员上传图像和pdf,但它在邮递员上失败了,因为它不允许两个文件同时上传。一次只能上传一个文件。