【发布时间】:2020-02-29 11:29:33
【问题描述】:
我正在开发一个简单的文件上传网站,但一直无法无误地上传文件。当要上传的文件小于 ~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, 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);
});
});
^^完全相同的文件(~370kb)被多次上传,都导致不同的大小,没有一个是完整的文件(都已损坏)
上传任何大于~1mb的文件时会出现^^502错误
【问题讨论】:
标签: node.js express xmlhttprequest multer