- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个用 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/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!