web-dev-qa-db-ja.com

バイト配列、つまりbyte []をAzureBlob Storageに保存するにはどうすればよいですか?

ストリームを保存する方法は知っていますが、そのストリームを取得してサムネイルやその他のサイズの画像を作成したいのですが、バイト[]をAzure BlobStorageに保存する方法がわかりません。

これは私がストリームを保存するために今していることです:

 // Retrieve reference to a blob named "myblob".
        CloudBlockBlob _blockBlob = container.GetBlockBlobReference("SampleImage.jpg");

        // upload from Stream object during file upload
        blockBlob.UploadFromStream(stream);

        // But what about pushing a byte[] array?  I want to thumbnail and do some image manipulation
14
Shane

これは以前はストレージクライアントライブラリ(確かにバージョン1.7)にありましたが、バージョン2.0で削除されました

「すべてのアップロードおよびダウンロードメソッドがストリームベースになり、FromFile、ByteArray、Textのオーバーロードが削除されました。」

http://blogs.msdn.com/b/windowsazurestorage/archive/2012/10/29/windows-Azure-storage-client-library-2-0-breaking-changes-amp-migration-guide。 aspx

ただし、バイト配列の周囲に読み取り専用メモリストリームを作成することは、非常に軽量です。

byte[] data = new byte[] { 1, 2, 3 };
using(var stream = new MemoryStream(data, writable: false)) {
    blockBlob.UploadFromStream(stream);
}

更新:UploadFromByteArrayが戻ってきました

MSDNドキュメントソースコード でわかることから、これはバージョン3.0で戻ってきましたが、バージョン4.0でもまだ存在しています。

23
Rob Church

更新:

UploadFromByteArrayが戻ってきました。

public void UploadFromByteArray (
    byte[] buffer,
    int index,
    int count,
    [OptionalAttribute] AccessCondition accessCondition,
    [OptionalAttribute] BlobRequestOptions options,
    [OptionalAttribute] OperationContext operationContext
)

http://msdn.Microsoft.com/en-us/library/Microsoft.windowsazure.storage.blob.cloudblockblob.uploadfrombytearray.aspx

8
iceburg

Azureについても何も知りませんが、Streamsを使用すると、次のようにアプローチできます。

//byte[] data;

using(var ms = new MemoryStream(data, false))
{
    blockBlob.UploadFromStream(ms);
}
2
spender