我有一个通过System.Drawing动态生成的图像.然后我将生成的图像输出到MemoryStream以存储到我的Azure blob中.
但我似乎无法将我的文件存储在我选择的blob中.没有错误发生,我的图像成功保存到MemoryStream.正如所料,我的blob是空的.
我确保我的blob容器具有公共读/写访问权限.
码
// Retrieve storage account from connection string. CloudStorageAccount storageAccount = CloudStorageAccount.Parse(String.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}",Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue("CMSAzureAccountName").ToString(),Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue("CMSAzureSharedKey").ToString())); // Create the blob client. CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); // Retrieve reference to a prevIoUsly created container. CloudBlobContainer container = blobClient.GetContainerReference("myimagecontainer"); // Retrieve reference to a blob named "myblob". CloudBlockBlob blockBlob = container.GetBlockBlobReference("test.jpg"); //Output image ImageCodecInfo[] Info = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(); EncoderParameters Params = new System.Drawing.Imaging.EncoderParameters(1); Params.Param[0] = new EncoderParameter(Encoder.Quality,100L); System.IO.MemoryStream msImage = new System.IO.MemoryStream(); GenerateImage.Render(imageOutput).Save(msImage,Info[1],Params); //GenerateImage.Render() method creates a custom image and returns a Bitmap // Create or overwrite the "myblob" blob with contents from a local file. using (var fileStream = msImage) { blockBlob.UploadFromStream(fileStream); }
任何帮助,将不胜感激.
更新
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(String.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}",Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue("CMSAzureSharedKey").ToString()));
至
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("DiagnosticsConnectionString"));
解决方法
尝试将内存流的位置设置为0,看看是否有帮助.类似下面的代码:
msImage.Position = 0;//Move the pointer to the start of stream. // Create or overwrite the "myblob" blob with contents from a local file. using (var fileStream = msImage) { blockBlob.UploadFromStream(fileStream); }