2012-01-04 4 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実際にはバーコード画像です。私はコードを編集するために投稿を編集しました。私がしたかったのは、自分のウェブサイトのフォルダにその画像をコピー/エクスポートすることでした。その結果、Webフォルダにファイル(〜/ fa/barcodeimages/barcode1.jpeg)があります。 –

+0

@PodMays:ブラウザにURLを入力すると、jpegが正しくレンダリングされますか?もしそうでなければ、ビットマップの構築方法に問題があります。 – shahkalpesh

答えて

1

バーコードイメージを生成するために必要なコードであるビジネスロジックが間違った場所にあります。

あなたは、「バーコードを提供し、両方のことを離れて(URLに対応するための画像を提供する程度である)あなたのaspxページのプレゼンテーションロジックからそのビジネスロジックを維持し、どこかにBitmap作成ロジックを移動する必要があります"と"バーコードをディスクに保存する "というコードを使用することができます。これは、異なるビジネスロジックアセンブリ内に存在する可能性があります。または、同じプロジェクト内の別のクラスに存在することもあります。主なものは、あなたが再利用可能な場所にそれをしたいということです。その時点で

あなたのaspxコードのようなものに変更し、:

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:しかし、それは私の主張です。プレゼンテーションレイヤーに入れるのは良いことではありません。 –

関連する問題