2014-01-10 5 views
0

Я пытаюсь загрузить около 1000 изображений. Для этого я генерирую случайное число, преобразуя этот текст в изображение. После этого на кнопку нажмите, я загружаю это сгенерированное изображение. Это работает нормально. Теперь я хочу запустить этот цикл 1000 раз, чтобы загрузить тысячи изображений. Ниже код работает нормально, когда цикл работает один раз, но когда цикл работает 1000 раз, он не работает, как я ожидаю.скачать сгенерированные изображения автоматически несколько раз

Кроме того, я хочу изменить папку назначения, в которой должны быть загружены эти изображения. Как я могу это сделать?

Below if I change value of variable i to 1000, the output is not what I am expecting

public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { for (int i = 0; i < 1; i++) { CallBUttonClick(); }

} 


    protected void Button1_Click(object sender, EventArgs e) 
    { 
     var s = GenerateRandomCode(); 
     RandomImage ci = new RandomImage(s.ToString(), 300, 75); 
     this.Response.Clear(); 
     this.Response.ContentType = "image/jpeg"; 
     Response.AppendHeader("Content-Disposition", "attachment; filename=downloadedFile.JPG"); 
     ci.Image.Save(this.Response.OutputStream, ImageFormat.Jpeg); 
     ci.Dispose(); 

    } 

    protected void CallBUttonClick() 
    { 
     Button1_Click(Button1, null); 
    } 

    private string GenerateRandomCode() 
    { 
     Random r = new Random(); 
     string s = ""; 
     for (int j = 0; j < 5; j++) 
     { 
      int i = r.Next(3); 
      int ch; 
      switch (i) 
      { 
       case 1: 
        ch = r.Next(0, 9); 
        s = s + ch.ToString(); 
        break; 
       case 2: 
        ch = r.Next(65, 90); 
        s = s + Convert.ToChar(ch).ToString(); 
        break; 
       case 3: 
        ch = r.Next(97, 122); 
        s = s + Convert.ToChar(ch).ToString(); 
        break; 
       default: 
        ch = r.Next(97, 122); 
        s = s + Convert.ToChar(ch).ToString(); 
        break; 
      } 
      r.NextDouble(); 
      r.Next(100, 1999); 
     } 
     return s; 
    } 
} 

Добавление RandomImage.cs класс файла

using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Drawing.Text; using System; public class RandomImage { //Default Constructor public RandomImage() { } //property public string Text { get { return this.text; } } public Bitmap Image { get { return this.image; } } public int Width { get { return this.width; } } public int Height { get { return this.height; } } //Private variable private string text; private int width; private int height; private Bitmap image; private Random random = new Random(); //Methods declaration public RandomImage(string s, int width, int height) { this.text = s; this.SetDimensions(width, height); this.GenerateImage(); } public void Dispose() { GC.SuppressFinalize(this); this.Dispose(true); } protected virtual void Dispose(bool disposing) { if (disposing) this.image.Dispose(); } private void SetDimensions(int width, int height) { if (width <= 0) throw new ArgumentOutOfRangeException("width", width, "Argument out of range, must be greater than zero."); if (height <= 0) throw new ArgumentOutOfRangeException("height", height, "Argument out of range, must be greater than zero."); this.width = width; this.height = height; } private void GenerateImage() { Bitmap bmp = new Bitmap(1, 1); Graphics graphics = Graphics.FromImage(bmp); Font font = new Font(FontFamily.GenericSansSerif, 28); SizeF stringSize = graphics.MeasureString(this.text, font); bmp = new Bitmap(bmp, (int)stringSize.Width+30, (int)stringSize.Height+30); graphics = Graphics.FromImage(bmp); graphics.DrawString(this.text, font, Brushes.White, 0, 0); font.Dispose(); graphics.Flush(); graphics.Dispose(); this.image = bmp; } }

ответ

0

Привет вам нужно сохранить вам растровый файл на physcial папку. Я изменил код. См. Ниже код

private void GenerateImage() 
    { 
     Bitmap bmp = new Bitmap(1, 1); 

     Graphics graphics = Graphics.FromImage(bmp); 
     Font font = new Font(FontFamily.GenericSansSerif, 28); 
     SizeF stringSize = graphics.MeasureString(this.text, font); 
     bmp = new Bitmap(bmp, (int)stringSize.Width + 30, (int)stringSize.Height + 30); 
     graphics = Graphics.FromImage(bmp); 
     graphics.DrawString(this.text, font, Brushes.White, 0, 0); 
     font.Dispose(); 
     graphics.Flush(); 
     graphics.Dispose(); 
     bmp.Save("C:\\" + this.text + ".jpg"); 
     this.image = bmp; 


    } 

Я также удалил код ниже, нажав кнопку и отдохнул, он работает нормально.

//this.Response.Clear(); 
     //this.Response.ContentType = "image/jpeg"; 
     //Response.AppendHeader("Content-Disposition", "attachment; filename=downloadedFile.JPG"); 

     //ci.Image.Save(this.Response.OutputStream, ImageFormat.Jpeg); 
     //ci.Dispose(); 
+0

Я добавил только значение 1000. Тогда u получит не выход, что я ожидаю. Вы можете использовать код в примерном приложении для проверки – Aakansha

+0

В основном он добавляет «downloadFile.jpeg, attachment», «downloadFile (1) .jpeg, вложение» в качестве имени файла, и я не хочу редактировать имя переименования для 1000 iamges, которые скачан ... так что любой способ исправить имя файла, полученное при загрузке изображений, когда я больше 1 – Aakansha

+0

Не могли бы вы обратиться к http://htmlrenderer.codeplex.com/ –

0

Это не то, как работает ASP.NET Page Life Cycle. Если вы используете объект Response для загрузки загрузки, вы можете использовать один файл.

Вы приближаетесь к проблеме с неправильной стороны; вы говорите: «Я пытаюсь загрузить около 1000 изображений». Это процесс на стороне клиента, в браузере, если хотите.

Однако вы пытаетесь решить эту проблему на стороне сервера.

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

Другими словами, вы не можете «загрузить» несколько файлов с сервера, вы должны запросить их по одному.

Смежные вопросы