C# 如何将字节数组即字节[]保存到Azure Blob存储?

C# 如何将字节数组即字节[]保存到Azure Blob存储?,c#,azure,azure-storage-blobs,C#,Azure,Azure Storage Blobs,我知道如何保存流,但我想获取该流并创建缩略图和其他大小的图像,但我不知道如何将字节[]保存到Azure Blob存储中 这就是我现在正在做的来保存流: // Retrieve reference to a blob named "myblob". CloudBlockBlob _blockBlob = container.GetBlockBlobReference("SampleImage.jpg"); // upload from Stream object

我知道如何保存流,但我想获取该流并创建缩略图和其他大小的图像,但我不知道如何将字节[]保存到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

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

//byte[] data;

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

这以前在存储客户机库中(当然是1.7版),但他们在2.0版中将其删除

“所有上传和下载方法现在都是基于流的,FromFile, ByteArray,文本重载已被删除。“

但是,围绕字节数组创建只读内存流非常轻量级:

byte[] data = new byte[] { 1, 2, 3 };
using(var stream = new MemoryStream(data, writable: false)) {
    blockBlob.UploadFromStream(stream);
}
更新:从ByteArray上传回来了
-从中可以看出,这是3.0版的功能,4.0版的功能仍然存在。

这是我当前使用的功能:

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

从ByteArray上传回来了

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

使用新的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);
}

所以你只能上传流,所以你每次都要转换?没有办法只推一个字节数组?我对Azure一无所知。抱歉。@Shane,我认为如果按照我上面的编辑使用MemoryStream构造函数,将不会复制字节数组,因此我认为这种方法是有效的。我的测试(在中详细说明)非常强烈地表明,它确实重复使用了字节数组。啊,因此,一个明确的否定,它不再可用。明白了。谢谢。谢谢你的新方法,有一个关于blobName的小查询。。我们可以在这里使用的文件名是blobname是的,blobname是文件名@EnigmaState您可以将整个路径与目录一起使用,当您使用Azure Storage Explorer时,它会在目录中进行转换,以获得更好的可视化效果。示例:folder1/folder2/filename.txt