Экспортировать элемент управления ASP Image в папку - PullRequest
0 голосов
/ 04 января 2012

У меня есть 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. И это кажется неэффективным.

1 Ответ

1 голос
/ 04 января 2012

Похоже, проблема в том, что ваша бизнес-логика - код, необходимый для создания изображения штрих-кода, - находится не в том месте.

Вы должны держать эту бизнес-логику подальше от презентации логика вашей 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 (или кем бы то ни было).Если вы не используете внедрение зависимостей, вы можете создать новый экземпляр напрямую, указав каждый раз шрифт и т. Д. - это не так приятно, но все должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...