问题
I know how to save Streams, but I want to take that stream and create thumbnails and other sized images, but I don't know how to save a byte[] to the Azure Blob Storage.
This is what I'm doing now to save the Stream:
// 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
回答1:
This used to be in the Storage Client library (version 1.7 for sure) - but they removed it in version 2.0
"All upload and download methods are now stream based, the FromFile, ByteArray, Text overloads have been removed."
http://blogs.msdn.com/b/windowsazurestorage/archive/2012/10/29/windows-azure-storage-client-library-2-0-breaking-changes-amp-migration-guide.aspx
Creating a read-only memory stream around the byte array is pretty lightweight though:
byte[] data = new byte[] { 1, 2, 3 };
using(var stream = new MemoryStream(data, writable: false)) {
blockBlob.UploadFromStream(stream);
}
Update: UploadFromByteArray is back
MSDN documentation - from what I can tell in the source code, this came back for version 3.0 and is still there for version 4.0.
回答2:
update:
UploadFromByteArray is back.
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
回答3:
I also know nothing about Azure, but using Streams, you could approach it as follows:
//byte[] data;
using(var ms = new MemoryStream(data, false))
{
blockBlob.UploadFromStream(ms);
}
回答4:
This is the function I currently use:
//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();
}
}
来源:https://stackoverflow.com/questions/15115212/how-do-i-save-byte-arrays-i-e-byte-to-azure-blob-storage