13

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 に直接渡すにはどうすればよいですか?

4

4 に答える 4

1

マルチパートを使用せずに Azure Storage SDK for Node 経由でバイナリ データ (画像など) をアップロードするには、さまざまなオプションがあります。

Node の Buffer および Stream 定義に基づいて、それらを操作すると、これらは BLOB アップロードのほぼすべてのメソッドを使用して処理できます: createWriteStreamToBlockBlobcreateBlockBlobFromStreamcreateBlockBlobFromText.

参照はここにあります: Upload a binary data from request body to Azure BLOB storage in Node.js [restify]

于 2015-09-16T14:50:48.893 に答える
0

ソリューションを実装しようとして .createBlockBlobFromStream に問題がある人は、このメソッドが新しいバージョンでわずかに変更されていることに注意してください

古いバージョン:

createBlockBlobFromStream(containerName, blobName, part, size, callback)

新しいバージョン

createBlockBlobFromStream(containerName, blobName, part, size, options, callback)

(オプションを気にしない場合は、空の配列を試してください) をパラメーターに使用します。

奇妙なことに、「オプション」はオプションであるはずですが、何らかの理由で、それを省略すると失敗します。

于 2013-11-11T04:55:21.693 に答える