Saeeed Sayed Ответов: 2

Asp, net C# скачать изображение из растрового изображения


I have a picture on the server is a generous certificate of appreciation when the student searches with a number the student's data is written on the image and without saving it on the server the student protects it on his machine
I got the code to write on the image, but it saves it on the server. Please help me. Instead of saving on the server, the downloader works for the student.
This is the writing code

<pre>Bitmap bitMapImage = new Bitmap(Server.MapPath("img1.jpg"));
            Graphics graphicImage = Graphics.FromImage(bitMapImage);
            graphicImage.DrawString("testing 1 2 3",
            new Font("Arial", 20, FontStyle.Bold),
            SystemBrushes.WindowText, new Point(0, 0));
                    //  I want to replace this by downloading it to the student machine //instead of saving it to the server          bitMapImage.Save(Server.MapPath("~/Images")+"newImage.jpg" , ImageFormat.Jpeg);
            graphicImage.Dispose();

растровое изображение.Располагать();

Что я уже пробовал:

я
tried

скачать изображение на клиентский ПК

Richard MacCutchan

Вы не можете загружать файлы на компьютер пользователя, это было бы серьезным нарушением безопасности. Только они могут сделать это, запросив загрузку. То, что вы должны сделать, это создать файл, который они затем могут загрузить через свой браузер.

2 Ответов

Рейтинг:
12

OriginalGriff

Преобразуйте изображение в байтовый массив, а затем используйте BinaryWrite для отправки его клиенту в виде файла:

Response.AddHeader("Cache-Control", "no-cache, must-revalidate, post-check=0, pre-check=0");
Response.AddHeader("Pragma", "no-cache");
Response.AddHeader("Content-Description", "File Download");
Response.AddHeader("Content-Type", "application/force-download");
Response.AddHeader("Content-Transfer-Encoding", "binary\n");
Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
Response.BinaryWrite(data);
Response.End();


Richard MacCutchan

Глупый вопрос, но ..... может ли сервер заставить это сделать без вмешательства пользователя?

OriginalGriff

Да.
Однако это зависит от пользователя, что с ним происходит, и Chrome, по крайней мере, предупредит вас о zip, exe и тому подобном.

Richard MacCutchan

Спасибо, я этого не знал.

Рейтинг:
0

MadMyche

1. Создайте MemoryStream и "сохраните" изображение к этому.
2. Запишите вышеуказанный поток памяти в виде ответ

Будет выглядеть примерно так

Bitmap bitMapImage = new Bitmap(Server.MapPath("img1.jpg"));
Graphics graphicImage = Graphics.FromImage(bitMapImage);
graphicImage.DrawString("testing 1 2 3",
new Font("Arial", 20, FontStyle.Bold),
SystemBrushes.WindowText, new Point(0, 0));
        
// I want to replace this by downloading it to the student machine 
// instead of saving it to the server
// bitMapImage.Save(Server.MapPath("~/Images")+"newImage.jpg" , ImageFormat.Jpeg);

MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] bytesInStream = memoryStream.ToArray();
memoryStream.Close(); 

Response.Clear();
Response.ContentType = "image/jpeg";
Response.AddHeader("content-disposition", "attachment; newImage.jpg");
Response.BinaryWrite(bytesInStream);

graphicImage.Dispose();
bitMapImage.Dispose();

Response.End();
Полезная информация:
c# - сохранение растрового изображения в поток памяти - переполнение стека[^]
c# - Как загрузить memorystream в файл? - переполнение стека[^]


Saeeed Sayed

Я попробовал его но он не загружает изображение а загружает страницу по имени с ex aspx