2016-12-30 5 views
0

NodeJSを使用してビデオBLOBオブジェクトをMongo DBにアップロードする必要があります。 ビデオの場合私はvideo.jsを使用していますhttps://github.com/collab-project/videojs-record 以下のようにAjaxコールを使用してNodeJSにblobオブジェクトを送信しています。nodejsからMongo DBにvideo/webm型のblobオブジェクトをアップロードするには?

var file={ 
    name:'abc', 
    data: player.recordedData.video 
}; 
$.ajax({ 
     type: 'POST', 
     url: '/uploadVideo', 
     data: file, 
     dataType: 'JSON' 

}).done(function(data) { 
       alert("success"); 
}); 
ここ

ファイルなど私は、ファイル名などの他のフィールドを含む私のコレクションに保存したいJSONオブジェクト、BLOBデータは、私は、コード

router.post('/uploadVideo',function (req, res ,next) { 
    var file=req.body; 
    console.log("file"+file); 
    var collection = db.get('test'); 
       collection.insert(file, function(err, result){ 
       console.log('video saved in mongo db'); 
        res.send(file); 
       }); 

}); 

でコンソール文の下に持っているのNode.jsの終わりですファイルオブジェクトが正常に動作します。 しかし、mongo DBコレクションにJSONを挿入する際に500エラーが発生しました。

誰でも私にコレクションにBLOBを挿入するためのソリューションを提供できますか?私のコードにバグがあるかどうかを教えてください。 ありがとう

+0

私たちの全体の誤差を与え、 'はconsole.log(typeof演算(ファイル))のような何かをし'てください。 – Kristian

+0

console.log(typeof(file))を出力したときにコンソール上にStringが表示されました。 – Vrushali

+0

私は、データベースにブロブを埋め込むことは、一般的には最良のアイデアではないことを発見しました。通常はコストが高く、通常はもっと多くの作業が必要です。代わりに、私は正しい仕事のために適切なツールを使用します。バルクストレージ(例:S3、データベースレコードまたはドキュメントにはURL参照があります) – Paul

答えて

0

私はどのミドルウェアを使用しているのですか?ここには、multerbody-parserを使用している作業サンプルがあります。

コードの重要な部分: -

フォームデータフィールド名(uploadfile)が一致しなければなりません。そして、ダウンロードした場所からfsを使ってファイルを読み込み、MongoDBコレクションに挿入される文書に設定します。

upload.single('uploadfile'); 


insertdata["file"] = fs.readFileSync(req.file.path); 

フォームデータのフィールド名: -

File upload: <input type="file" name="uploadfile"><br> 

完全なHTMLフォーム: -

<form action="http://localhost:3000/filesave" enctype="multipart/form-data" method="post"> 
    Username: <input type="text" name="username"><br> 
    File upload: <input type="file" name="uploadfile"><br> 
    <input type="submit" value="Send"> 
</form> 

の作業コード: -

var express = require('express'); 
var Db = require('mongodb').Db, 
    Server = require('mongodb').Server, 
    bodyParser = require('body-parser') 
    fs = require('fs'); 

var db = new Db('test', new Server('localhost', 27017)); 

var multer = require('multer'); 
var upload = multer({ dest: 'uploads/' }); 


var collection, dbObj; 
module.exports = { 

}; 

var app = express(); 

app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 

var exports = module.exports; 

app.post("/filesave", upload.single('uploadfile'), function (req, res) { 
    db.open(function (err, success) { 
     if (err) { 
      console.log("DB connection error"); 
     } else { 
      console.log("DB connection is successful"); 
      console.log(req.body.username); 
      console.log(req.file); 
      var insertdata ={}; 
      insertdata["username"] = req.body.username; 
      insertdata["file"] = fs.readFileSync(req.file.path); 

      db.collection("filesave").insert(insertdata, function (inserr, result) { 
       if (inserr) { 
        console.log(inserr); 
        db.close(true); 
        res.json(inserr); 
       } else { 
        db.close(true); 
        res.json("Successfully persisted in database"); 
       } 
      }); 
     } 
    }) 


}); 

app.listen(3000); 
MongoDBのコレクションに保存されて

データ: -

Binary data saved in Mongo Collection

+0

オーディオとビデオファイルのアップロードにも同じコードを使用できますか? – Vrushali

+0

はい、データはバイナリとして保存されます。ただし、MongoDBコレクションの最大サイズは4 MBで、データが4 MBを超える場合は、MongoDBのGridFS機能を使用することを検討する必要があります。正しいコンテンツタイプのファイルを使用する必要があります。 – notionquest

関連する問題