将大file upload到NodeJS Web服务器

我正在使用NodeJS服务器(ExpressJS)来提供我的Web应用程序。 新的要求之一是用户能够将大型video(可能在演出中)上传到服务器。 他们稍后将能够再次下载它们。 我可以用当前的堆栈来实现吗?

我遇到了使用Multer JS和前端指定的“multipart / form-data”的教程。 如果我使用它,我的Express能够在向服务器磁盘写入一个巨大的单个video文件的同时提供其他HTTP请求吗?

Multer应该可以正常工作。 它将通过HTTP将数据stream传输到磁盘上的文件。 它不会locking你的服务器。 然后在你的端点你有权访问该文件的位置,并可以做任何你需要的东西。

我自己做了这个(〜20GB的文件,没有multer),我可以推荐以下(可能大部分你已经考虑过,但为了完整性):

  1. select一个合适的上传控件(或者自己写,但是基本上把数据分块是最好的,我用plupload)

  2. 在服务器上创build一个API来处理接收到的块数据,并在上传过程中将其写出到临时位置(您也可以散列并检查单个部分)。

  3. 一旦上传完成,检查文件(我使用客户端生成的哈希,并检查上传的数据)

  var express = require("express"); var app = express(); var async = require('async'); var fs = require('fs'); var client = redis.createClient(); var multiparty = require('multiparty'); var util = require('util'); app.post('/',function(req,res){ var form = new multiparty.Form(); form.parse(req, function(err, fields, files) { client.get(fields.otp, function(err, reply) { var oldpath = files.file[0].path; var newpath = path + files.file[0].originalFilename; fs.rename(oldpath, newpath, function (err) { if (err) throw err; res.write('File uploaded and moved!'); res.end(); }); } } app.listen(2001,function(){ console.log("Server is running on port 2001"); });