0

我在带有多方包的 node.js 中有文件上传系统

        var gm          = require('gm').subClass({imageMagick: true});
        var multiparty  = require('multiparty');

        var form        =  new multiparty.Form();

        var s3          =  sails.config.aws.main();

        var options     = {
            partSize: 5242880, queueSize: 1
        }
        form.parse(req, function(err, fields, files) {

            gm(files.fileToUpload[0].path)
                .resize(200,200,'^')
                .stream(function (err,buffer) {

                    s3.upload({
                        Bucket:'mybucket',
                        Body:buffer,
                        Key:'artwork-croppedimages/test.jpg'
                    },options,function(err, data) {
                        console.log("upload error",err);
                        console.log("data",data);
                    });

                 })

        });

它工作正常,但是当上传较大的文件通常大于 20 MB 时,我收到了这个错误

Error: Request aborted
    at IncomingMessage.onReqAborted (/var/www/node/cushbuart/node_modules/multiparty/index.js:183:17)
    at emitNone (events.js:86:13)
    at IncomingMessage.emit (events.js:188:7)
    at abortIncoming (_http_server.js:381:9)
    at socketOnClose (_http_server.js:375:3)
    at emitOne (events.js:101:20)
    at Socket.emit (events.js:191:7)
    at TCP._handle.close [as _onclose] (net.js:511:12)

我知道它通过增加超时来解决,但我不知道如何在sails.js 框架中

4

1 回答 1

1

请求超时是 Node.js 的一个特性;没有关于它的 Sails 特定的东西。从Node.js 文档

request.setTimeout(超时[, 回调])

添加于:v0.5.9

  • timeout <number>请求被认为超时之前的毫秒数。
  • callback <Function>发生超时时调用的可选函数。与绑定到超时事件相同。

一旦一个套接字被分配给这个请求并被连接,socket.setTimeout() 就会被调用。

因此,在您的 Sails.js 操作中,req.setTimeout(4 * 60 * 1000)如果您想将超时时间增加到 4 分钟,请执行此操作。

您还可以考虑使用Sails的内置文件上传功能!

于 2017-09-21T00:31:28.500 回答