将大文件上传到NodeJS webserver

时间:2016-11-21 15:20:21

标签: node.js express multer

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

我使用Multer JS和#34; multipart / form-data"由前端指定。如果我使用它,我的Express能够在将巨大的单个视频文件写入服务器磁盘时提供其他HTTP请求吗?

3 个答案:

答案 0 :(得分:3)

我自己完成了这个(~20GB文件,没有multer)我可以推荐以下内容(可能大多数是你考虑过的,但为了完整性):

  1. 选择一个合适的上传控件(或编写自己的上传控件,但基本上是最好的数据。我认为我使用的是plupload)

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

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

答案 1 :(得分:1)

Multer应该可以正常工作。它将数据通过HTTP传输到磁盘上的文件。它不会锁定您的服务器。然后在您的端点中,您可以访问该文件位置,并可以随意使用它。

答案 2 :(得分:-1)

    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");
});