如何将字节数组(例如byte[])保存到Azure Blob存储?

bvjxkvbb  于 2022-11-17  发布在  其他
关注(0)|答案(5)|浏览(199)

我知道如何保存流,但我想获取该流并创建缩略图和其他大小的图像,但我不知道如何将字节[]保存到Azure Blob存储。
这就是我现在要做的保存溪流的事情:

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

q5lcpyga1#

这曾经在Storage Client库中(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);
}

更新:从字节数组上载已恢复

MSDN documentation-从我在the source code中所知道的来看,这在3.0版本中回来了,在4.0版本中仍然存在。

m3eecexj

m3eecexj2#

使用新的SDK azure.storage.blob

var blobContainerClient = new BlobContainerClient(storageConnectionString, containerName);
BlobClient blob = blobContainerClient.GetBlobClient(blobName);

using(var ms = new MemoryStream(data, false))
{
     await blob.UploadAsync(ms);
}
zsbz8rwp

zsbz8rwp3#

更新:
从字节数组上载已恢复。

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
新链接:https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.storage.blob.cloudblockblob.uploadfrombytearray?view=azure-dotnet-legacy

6psbrbz9

6psbrbz94#

我也对Azure一无所知,但使用Streams,您可以按如下方式处理它:

//byte[] data;

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

dbf7pr2w5#

这是我目前使用的函数:

//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();
    }
}

相关问题