14

System.Drawing を介して動的に生成される画像があります。次に、生成された画像をMemoryStreamA​​zure BLOB に保存するために出力しています。

しかし、選択したブロブにファイルを保存できないようです。エラーは発生しておらず、画像は に正常に保存されていMemoryStreamます。予想どおり、ブロブは空です。

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("CMSAzureAccountName").ToString(), Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue("CMSAzureSharedKey").ToString()));

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("DiagnosticsConnectionString"));

しかし、「Gaurav Mantri」の回答は正しいものとしてマークします。彼の洞察がなければ、私の画像は BLOB にアップロードされなかったでしょう。

4

2 に答える 2

38

メモリ ストリームの位置を 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);
}
于 2013-02-21T10:30:36.410 に答える