我想要保存到特定文件夹的 ASP Image control 。
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 :(得分:1)
看起来问题是您的业务逻辑 - 生成条形码图像所需的代码 - 位于错误的位置。
您应该将该业务逻辑远离aspx页面的表示逻辑(这是关于提供图像以响应URL),并将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
理想情况下是BarcodeGenerator
类的一个依赖注入的实例(或者它原来的任何东西)。如果你没有使用依赖注入,你可以直接创建一个新实例,每次指定字体等 - 它不是那么令人愉快,但它应该可以正常工作。