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