2013-07-31 3 views
3

Попытка загрузить большой файл в экземпляр js узла с помощью экспресс, и он не будет работать с большими файлами. Со следующим ErrorMessage:Загрузите большой файл (1 ГБ) с узлом и выразьте

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... 

Что я могу сделать, чтобы предотвратить эту ошибку, когда я не хочу, чтобы кусок данных?

Надежда кто-то может помочь решить ;-)

+0

Вы попробуйте увеличить максимальный размер загружаемого файла? http://stackoverflow.com/questions/10574368/dynamically-limit-upload-file-size-in-express-node-js – mak

+0

@mak Да, я сделал (до express.bodyParser()), и нет никаких изменений ... – Bernhard

+0

Я сомневаюсь, что Express был написан с загрузкой файлов объемом 1 ГБ. Я бы начал смотреть на потоки данных. http://maxogden.com/node-streams –

ответ

1

Если проанализировать сообщение об ошибке,

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

Вы можете видеть, что kMaxLength является константой, которые определяют предел памяти процесса.
От https://github.com/joyent/node/wiki/FAQ

В настоящее время, по умолчанию v8 имеет предел памяти 512 на 32-битных системах и 1gb на 64-битных системах. Предел можно повысить, установив - max-old-space-size до 1 бит (32 бит) и ~ 1,7 гб (64 бит), но рекомендуется разделить один процесс на несколько работников, если вы попадаете в пределы памяти.

Таким образом, вы можете выполнить узел с флагом

node --max-old-space-size=2000 app.js 

Флаг единицы находится в мегабайтах см (https://github.com/joyent/node/blob/master/deps/v8/ChangeLog)

Смежные вопросы