2012-06-08 2 views
0

전에 웹 응용 프로그램이 "온 - 프레미스"솔루션 인 동안 디스크 저장 모드로 "표준"asp.net 차트 컨트롤을 사용했습니다. 이와 같이 :ASP.NET 차트 사용자 지정 처리기

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

이 모든 내 차트의 그림은 폴더/파일에있는 categories_XXX라는 이름으로 생성됩니다 ... 그리고 완벽했습니다.

이제 솔루션을 Azure 플랫폼에 전송하고 디스크에 차트 이미지를 저장하는 것이 더 이상 필요하지 않습니다. 그래서 Blob 저장소에서 차트 이미지를 저장 /로드하는 자체 차트 처리기를 만들었습니다. 핸들러는 다음과 같습니다 :

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

을 또한 나는이 새로운 핸들러를 사용하는 Web.config의에서 차트 설정을 편집 :

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 차트 컨트롤은 다음과 같이 지금이다.

이 핸들러는 작동하지만 내 사진은 일반적인 이름으로 저장됩니다 chart_1.png 을 chart_0.png

...

어떻게 예전처럼 파일 내 자신의 이름을 관리 할 수 ​​있습니다. 나는 ImageLocation="~/files/categories_#SEQ(30,20)"

을 asp.net 차트 컨트롤에 추가하려고하지만 성공하지는 못합니다. 내 이름 (열쇠)을 어떻게 설정할 수 있습니까? 핸들러, asp.net 차트 컨트롤 또는 코드 제어가 선언 된 코드 숨김 파일에서. 당신이 푸른 BLOB 저장소에 이미지를 저장하면 위의 코드에서

답변

1

직접 또는 당신은 폴더 형 차트 이미지 이름을 만들 수 있습니다 액세스가 그들을 당신이

http://azure_storage_name.*/_containername_/chartimage_name 

로 검색하면 있도록 컨테이너 내부를 저장하는

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

그것을 얻으려면, 당신은 단지 (당신이 당신의 저장에 저장하는 동안 코드를 변경해야) 기능 : 같은 푸른 물방울 저장소에 저장 될 파일/categories_1 및 파일/categories_2 등으로 :

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

그래서 이미지를 저장할 때 저장 용량이 /container_name/files/myimage_1.jpg 인 저축 저장 장치로 저장되며 Windows Azure 저장소에 액세스하여 확인할 수 있습니다.

이제 당신이 그것을 읽을 때 단지 열쇠를 읽고 당신이 예상대로 파일 이름을 얻을 것이다. 원하는 방식으로 코드를 마사지해야 할 수도 있지만 그 방법을 알려 줬습니다.

+0

감사합니다. 하지만 (예 : # SEQ() 사용하여) 전제 방식 asp.net 차트 컨트롤에서 차트 이미지의 내 자신의 이름을 정의 할 싶습니다. Save() 함수를 생성해야하기 때문에 "내 자신의 정의"키를 이미 가져와야합니다. 다른 사용자 (다른 이름)에 대한 코드 숨김의 키 ... – rjovic

+0

#SEQ를 사용하여 먼저 이러한 이름의 테이블을 만든 다음 키를이 이름으로 선택하여 원하는 것을 얻을 수 있습니다. . 또는 다른 사용자 이름 "filesX"를 사용하고 "fileX/image"및 "fileY/image"라는 파일 이름을 만들 수 있습니다. 이렇게하면 원하는 것을 얻을 수 있습니다. – AvkashChauhan

관련 문제