2012-01-04 3 views
0

ASP 이미지 컨트롤 특정 폴더에 저장하려고합니다.ASP 이미지 컨트롤을 폴더로 내보내기

Image1.ImageUrl = "~/fa/barcode.aspx?d=" + Label1.Text.ToUpper(); 

barcode.aspx이 무엇을 기본적으로 :

Bitmap oBitmap = new Bitmap(w, 100); 

     // then create a Graphic object for the bitmap we just created. 
     Graphics oGraphics = Graphics.FromImage(oBitmap); 

     oGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; 
     oGraphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel; 


     // Let's create the Point and Brushes for the barcode 
     PointF oPoint = new PointF(2f, 2f); 
     SolidBrush oBrushWrite = new SolidBrush(Color.Black); 
     SolidBrush oBrush = new SolidBrush(Color.White); 

     // Now lets create the actual barcode image 
     // with a rectangle filled with white color 
     oGraphics.FillRectangle(oBrush, 0, 0, w, 100); 

     // We have to put prefix and sufix of an asterisk (*), 
     // in order to be a valid barcode 
     oGraphics.DrawString("*" + Code + "*", oFont, oBrushWrite, oPoint); 
Response.ContentType = "image/jpeg"; 
oBitmap.Save(Response.OutputStream, ImageFormat.Jpeg); 

가 어떻게 폴더 (~/FA가/barcodeimages/)에 저장합니까? 지금까지 여기에 내가 시도 내용은 다음과 같습니다

WebClient webClient = new WebClient(); 
       string remote = "http://" + Request.Url.Authority.ToString() + "/fa/barcode.aspx?d=" + Label1.Text.ToUpper(); 
       string local = Server.MapPath("barcodeimages/" + Label1.Text.ToUpper() + ".jpeg"); 
       webClient.DownloadFile(remote, local); 

을하지만이 작동하지 않습니다, 난 항상 손상의 .jpeg 파일을 얻을. 그리고 비효율적 인 것처럼 보입니다.

+0

'oBitmap'의 출처에 대해 설명하지 않았거나 이미지 컨트롤을 "저장"하는 것이 실제로 무엇을 의미하는지 설명하지 않았습니다. 이미지 데이터 그 자체는 어디에 있고, 정확히 무엇을 저장하려고합니까? –

+0

@JonSkeet 사실 바코드 이미지입니다. 게시물을 편집하여 코드를 포함 시켰습니다. 내가하고 싶은 것은 이미지를 내 웹 사이트의 폴더로 복사/내보내기하는 것입니다. 따라서 결과는 웹 사이트 폴더에 파일이 있습니다 (~/fa/barcodeimages/barcode1.jpeg). –

+0

@PodMays : 브라우저에서 URL을 입력하면 jpeg가 올바르게 렌더링됩니까? 그렇지 않다면 문제는 비트 맵이 생성되는 방식입니다. – shahkalpesh

답변

1

바코드 이미지를 생성하는 데 필요한 코드 인 비즈니스 로직이 잘못된 위치에 있다는 것이 문제인 것처럼 보입니다.

당신은 (URL로 대응하는 이미지를 제공에 관한 것입니다) 귀하의 영문 페이지의 프리젠 테이션 논리에서 멀리 그 비즈니스 로직을 유지하고, 모두 "바코드를 제공 어딘가로 Bitmap 생성 논리를 이동해야

"및"바코드를 디스크에 저장 "코드를 사용할 수 있습니다. 이는 다른 비즈니스 로직 어셈블리에 있거나 단순히 동일한 프로젝트 내의 별도의 클래스에있을 수 있습니다. 중요한 것은 당신이 재사용이 가능한 곳에서 그것을 원한다는 것입니다. 같은 뭔가

Response.ContentType = "image/jpeg"; 
using (Bitmap bitmap = barcodeGenerator.Generate(Code)) 
{ 
    bitmap.Save(Response.OutputStream, ImageFormat.Jpeg); 
} 

및 저장 코드 변경 : 뭔가에

그 시점에서

, 귀하의 영문 코드 변경 여기

// TODO: Validate that the text here doesn't contain dots, slashes etc 
string code = Label1.Text.ToUpper(); 
string file = Server.MapPath("barcodeimages/" + code + ".jpeg"); 
using (Bitmap bitmap = barcodeGenerator.Generate(code)) 
{ 
    bitmap.Save(file, ImageFormat.Jpeg); 
} 

barcodeGenerator는 이상적으로 depedency 주입 인스턴스가 될 것입니다 BarcodeGenerator 클래스 (또는 무엇이든간에)가됩니다. 의존성 주입을 사용하지 않는다면 매번 글꼴 등을 지정하여 직접 새 인스턴스를 만들 수 있습니다. 즐겁지는 않지만 괜찮습니다.

+0

안녕하세요, 바코드 생성 코드는 실제로 Barcode.aspx (Page_Load)에 있습니다. 그리고 Image1.ImageUrl = "~/fixedasset/GenerateBarcodeImage.aspx? d ="+ Label1.Text.ToUpper();'on (Page1.aspx)으로 호출합니다. –

+0

@PodMays :하지만 그것은 요점입니다. 프레젠테이션 레이어에 포함시키는 것이 더 좋을 것입니다. –

관련 문제