Node で Express を使用すると、ファイルを正常にアップロードして、次のコード ブロックで Azure ストレージに渡すことができます。
app.get('/upload', function (req, res) {
res.send(
'<form action="/upload" method="post" enctype="multipart/form-data">' +
'<input type="file" name="snapshot" />' +
'<input type="submit" value="Upload" />' +
'</form>'
);
});
app.post('/upload', function (req, res) {
var path = req.files.snapshot.path;
var bs= azure.createBlobService();
bs.createBlockBlobFromFile('c', 'test.png', path, function (error) { });
res.send("OK");
});
これは問題なく動作しますが、Express は一時ファイルを作成し、最初にイメージを保存してから、ファイルから Azure にアップロードします。これはプロセスの非効率的で不必要なステップのように思われ、最終的には一時ファイル ディレクトリのクリーンアップを管理する必要があります。
Azure SDKのメソッドを使用してファイルを Azure ストレージに直接ストリーミングできるはずですがblobService.createBlockBlobFromStream
、ストリーム データにアクセスする方法を理解できるほど Node または Express に精通していません。
app.post('/upload', function (req, res) {
var stream = /// WHAT GOES HERE ?? ///
var bs= azure.createBlobService();
bs.createBlockBlobFromStream('c', 'test.png', stream, function (error) { });
res.send("OK");
});
そうする方法があるかもしれないことを示す次のブログを見つけました.Expressはストリームデータを取得し、解析してファイルシステムにも保存しています. http://blog.valeryjacobs.com/index.php/streaming-media-from-url-to-blob-storage/
vjacobs コードは、実際には別のサイトからファイルをダウンロードし、そのストリームを Azure に渡しているため、私の状況で動作するように適応できるかどうかはわかりません。
ノードを使用してアップロードされたファイル ストリームにアクセスし、Azure に直接渡すにはどうすればよいですか?