上传带有node和express的大文件(1GB)

时间:2013-07-31 12:03:59

标签: javascript node.js express

尝试使用express将大文件上传到节点js实例,并且它将因大文件而失败。 使用以下错误消息:

Error: Request aborted
at IncomingMessage.<anonymous> (/server/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js:107:19)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at abortIncoming (http.js:1892:11)
at Socket.serverSocketCloseListener (http.js:1904:5)
at Socket.EventEmitter.emit (events.js:117:20)
at TCP.close (net.js:466:12)
/server/upload/

buffer.js:194
  this.parent = new SlowBuffer(this.length);
                ^
RangeError: length > kMaxLength
    at new Buffer (buffer.js:194:21)
    at fs.js:220:16
    at Object.oncomplete (fs.js:107:15)
31 Jul 14:01:04 - [nodemon] app crashed - waiting for file changes before starting...

当我不想分块数据时,如何防止此错误?

希望有人可以帮忙解决; - )

1 个答案:

答案 0 :(得分:1)

如果您分析错误消息

buffer.js:194
   this.parent = new SlowBuffer(this.length);
            ^
RangeError: length > kMaxLength

您可以看到kMaxLength是一个常量,用于指定进程的内存限制 来自https://github.com/joyent/node/wiki/FAQ

  

目前,默认情况下,v8在32位上的内存限制为512mb   系统,以及64位系统上的1GB。可以通过设置来提高限制   --max-old-space-size最大为~1gb(32位)和~1.7gb(64位),但建议您拆分单个进程   如果你达到记忆限制,你可以分成几个工人。

因此您可以使用标志

执行节点
node --max-old-space-size=2000 app.js

标志单位为MB,见(https://github.com/joyent/node/blob/master/deps/v8/ChangeLog