0

私の Web アプリケーションが「オンプレミス」ソリューションである前は、ディスク ストレージ モードで「標準」の asp.net チャート コントロールを使用していました。このような :

<asp:Chart ID="AssetDistChart" runat="server" BackColor="Transparent" 
    Width="250px" Height="350px" ImageStorageMode="UseImageLocation" ImageLocation="~/files/categories_#SEQ(30,20)"> ...

これにより、すべてのチャートの写真が、categorys_XXX という名前でフォルダー /files に生成されます...そして、それは完璧に機能しました。

現在、ソリューションを Azure プラットフォームに転送する必要があり、チャート イメージをディスクに保存することはもはや選択肢ではありません。そこで、Blob Storage からチャート画像を保存/ロードする独自のチャート ハンドラーを作成しました。ハンドラーは以下です:

public class ChartImageHandler : IChartStorageHandler
    {
        ...

        public void Delete(string key)
        {
            CloudBlob csv = chartContainer.GetBlobReference(key);
            csv.Delete();
        }

        public bool Exists(string key)
        {
            bool exists = true;
            WebClient webClient = new WebClient();
            try
            {
                using (Stream stream = webClient.OpenRead(key))
                { }
            }
            catch (WebException)
            {
                exists = false;
            }
            return exists;
        }

        public byte[] Load(string key)
        {
            CloudBlob image = chartContainer.GetBlobReference(key);
            byte[] imageArray;
            try
            {
                imageArray = image.DownloadByteArray();
            }
            catch (Exception e)
            {
                System.Threading.Thread.Sleep(1000);
                imageArray = image.DownloadByteArray();

            }
            return imageArray;
        }

        public void Save(string key, byte[] data)
        {
            CloudBlockBlob pictureBlob = chartContainer.GetBlockBlobReference(key);
            pictureBlob.UploadByteArray(data);
        }
    }

また、私のasp.netチャートコントロールは次のようになりました:

<asp:Chart ID="AssetDistChart" runat="server" BackColor="Transparent" 
    Width="250px" Height="350px" ImageStorageMode="UseHttpHandler">

また、web.config のチャート設定を編集して、この新しいハンドラーを使用しました。

このハンドラーは機能しますが、私の写真は一般的な名前で保存されます:

chart_0.png chart_1.png ...

以前のように自分のファイル名を管理するにはどうすればよいですか。追加してみますImageLocation="~/files/categories_#SEQ(30,20)"

asp.net チャート コントロールに移行しましたが、成功しませんでした。自分の名前 (キー) とその配置場所を設定するにはどうすればよいですか? ハンドラー、asp.net チャート コントロール、または char コントロールが宣言されている分離コード ファイル。

4

1 に答える 1

1

上記のコードでは、イメージを Azure Blob Storage に保存すると、コンテナー内に直接保存されるため、それらにアクセスすると、次のように取得されます。

http://azure_storage_name.*/_containername_/chartimage_name

または、files/categories_1 や files/categories_2 などのフォルダー タイプのグラフ イメージ名を作成することもできます。これは、次のように Azure Blob ストアに格納されます。

http://azure_storage_name.*/_containername_/files/categories_1
http://azure_storage_name.*/_containername_/files/categories_2

これを取得するには、コードを Save() 関数に保存するときにコードを変更するだけです。

string key = "files/myimage_1.jpg";
CloudBlockBlob pictureBlob = container.GetBlockBlobReference(key);

そのため、イメージを保存すると、Azure ストレージ /container_name/files/myimage_1.jpg に保存されます。これは、Windows Azure ストレージにアクセスすることで確認できます。

これを読むと、キーを読むだけで、期待どおりのファイル名が得られます。思い通りにするにはコードを調整する必要があるかもしれませんが、その方法を紹介しました。

于 2012-06-08T17:44:29.830 に答える