21

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

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

 // 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
4

5 に答える 5

30

これは、以前はストレージ クライアント ライブラリ (確かにバージョン 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 ではまだ残っています。

于 2013-02-27T15:14:41.403 に答える
4

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

//byte[] data;

using(var ms = new MemoryStream(data, false))
{
    blockBlob.UploadFromStream(ms);
}
于 2013-02-27T14:59:05.383 に答える
-1

これは私が現在使用している機能です:

//CREATE FILE FROM BYTE ARRAY
public static string createFileFromBytes(string containerName, string filePath, byte[] byteArray)
{

    try {

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings("StorageConnectionString").ConnectionString);



        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference(containerName);

        if (container.Exists == true) {
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(filePath);


            try {
                using (memoryStream == new System.IO.MemoryStream(byteArray)) {
                    blockBlob.UploadFromStream(memoryStream);
                }
                return "";
            } catch (Exception ex) {
                return ex.Message.ToString();
            }
        } else {
            return "Container does not exist";
        }
    } catch (Exception ex) {
        return ex.Message.ToString();
    }
}
于 2013-02-27T19:48:42.980 に答える