2016-11-21 33 views
2

現在、NodeJSサーバー(ExpressJS)を使用してWebアプリケーションを提供しています。新しい要件の1つは、ユーザーが大規模なビデオ(ギグの可能性がある)をサーバーにアップロードできるようにすることです。彼らは後で再びダウンロードすることができます。現在のスタックでこれを達成できますか?NodeJS Webサーバーに大きなファイルをアップロード

Multer JSを使用して、フロントエンドによって指定された「multipart/form-data」でチュートリアルを見つけました。これを使用すると、サーバーのディスクに巨大な単一のビデオファイルを書き込んでいる間に、私のExpressは他のHTTP要求を処理できますか?

答えて

1

Multerは正常に動作するはずです。 HTTP経由でディスク上のファイルにデータをストリーミングします。それはあなたのサーバーをロックしません。エンドポイントでは、そのファイルの場所にアクセスし、必要なものをすべて実行できます。

+1

をファイルをチェックし、完全アップロード:あなたは、単にそのファイルをアップロードしていますS3へ?もしそうなら、実際にクライアントがファイルを直接S3にアップロードさせることができます。これにより、ノードサーバーはGBのデータを処理する必要がなくなります。そして、S3はあなたのファイルをあなたのサーバーより速く誰にでも返す可能性があります。 – Randy

+0

S3へのアップロードは良い解決策のようです。あなたがそれを推薦しているのを見て、セキュリティの面でこれを行うのは安全でしょうか?確かに誰もあなたのS3にファイルをアップロードし始めないようにするために、ある種の認証方式がありますか? – jiminssy

+0

クライアントはAPIにS3へのアクセストークンを要求します。あなたのAPIは基本的にAmazonが提供するS3ライブラリを使ってこのトークンを作成します。これは一時的なトークンで、クライアントがS3に接続してファイルをアップロードします。アップロードしたら、パスまたは識別子のいずれかを使用してAPIにコールバックすることができます。しかし、あなたのAPIはS3ファイルを使うことができます。 – Randy

2

自分(〜20ギガバイトのファイル、multerなし)これを行った私は(おそらくあなたが考えられますが、完全性のためにしているほとんどが)次のことをお勧めすることができます:

  1. は、適切なアップロードコントロールを選択します(または書き込み

  2. サーバーでは、受信したチャンクデータを処理してアップロード中に一時的な場所に書き込むAPIを作成します(あなたは自分自身ですが、基本的にはデータをチャンクします)。ハッシュして個々の部分をチェックしたいかもしれません)。一度

  3. サイドノートでは(私はクライアントによって生成されたハッシュを使用して、アップロードされたデータに対してそれをチェックする)

+0

ただ興味がありますが、あなたは 'multer'を使用しないと決めた理由はありますか? – Randy

+1

私は4/5年前にそれをやった...プロジェクトが存在していたとは思わない(私はそれをやったときにフラッシュで多くのHTML5シミングを行っていた:O) –

0
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"); 
}); 
関連する問題