gpt4 book ai didi

node.js - 文件上传卡在生产代码上,但在本地工作 - multer,node.js

转载 作者:搜寻专家 更新时间:2023-11-01 00:42:36 24 4
gpt4 key购买 nike

我正在开发一个用 express 3 编写的应用程序,现在我们升级到 express 4,我遇到了文件上传问题。一切都适用于我的本地计算机 mac OSX,但不适用于 ubuntu 上的生产服务器。

我正在上传 zip 文件,里面有 png 和 psd。

我正在通过多部分形式上传文件:使用 multer 中间件。

本地一切正常,但在生产环境中连接断开。文件开始上传到主上传根目录,但作为 block 的一部分,例如我上传了 50 mb 的 zip 文件,但上传了大约 30 kb 并且连接中断,因为将数据作为 block 上传的 onFileDataupload 事件中断了。

app.js 中的设置

我的正文解析器设置:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }) );

我的多重设置:

app.use(multer({
dest: './upload',
limits: {
fieldNameSize: 500,
files: 2,
fields: 20,
fileSize: 200 * 1024 * 1024
},
rename: function (fieldname, filename) {
return fieldname + filename + Date.now();
},
onFileUploadStart: function (file) {
console.log('Upload starting for filename: ' + file.originalname);
},
onFileUploadData: function (file, data) {
// console.log(data.length + ' of ' + file.fieldname + ' arrived')
},
onParseStart: function () {
console.log('Form parsing started at: ', new Date())
},
onParseEnd: function (req, next) {
console.log('Form parsing completed at: ', new Date());
// usage example: custom body parse
//req.body = require('qs').parse(req.body);
// call the next middleware
next();
},
onFileUploadComplete: function (file) {
console.log(file.fieldname + ' uploaded to ' + file.path);
},
onFileSizeLimit: function (file) {
console.log('Failed: ', file.originalname)
fs.unlink('./' + file.path) // delete the partially written file
},
onFilesLimit: function () {
console.log('Crossed file limit!')
},
onFieldsLimit: function () {
console.log('Crossed fields limit!')
},
onPartsLimit: function () {
console.log('Crossed parts limit!')
},
onError: function(error, next) {
console.log("Error occurred while uploading the file!!");
next(error);
}

}));

我也尝试过强大的替代方案,但我有同样的问题,在本地工作,不在生产环境中工作。我认为这可能是按 Node 管理请求的问题。在生产环境中,我们使用 pm2。 Smoething 在文件上传时断开连接。

有没有人遇到过类似的问题并找到了解决方案?谢谢

最佳答案

您的 pm2 可能启用了“watch”选项;并上传 watched 目录中的文件。然后,每次您开始编写新文件时,pm2 都会重新启动应用程序(因为代码重新加载)。

要检查这是否解决了您的问题,只需从 jour process.json 中删除 "watch": true 或从命令行中删除标志 --wath 。如果它工作正常,请在此处阅读有关 pm2 watch ignores 的信息:https://github.com/Unitech/PM2/blob/master/ADVANCED_README.md#watch--restart ,并为您的环境和应用正确配置它。

关于node.js - 文件上传卡在生产代码上,但在本地工作 - multer,node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29624695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com