2010-08-30 5 views
1

Я создал эти функции, которые я описал в вопросе. Однако я думаю, что так, как я это делал, это не оптимальный способ сделать это.Загрузите изображение, переименуйте его, сделайте миниатюру и замените оригинал. (оптимизация)

 [HttpPost] 
     public ActionResult Create(FormCollection collection, string schooljaarparam, FlatONASAanbieder foa) { 

     if (ModelState.IsValid) { 

      // var r = new List<ViewDataUploadFilesResult>(); 

      foreach (string file in Request.Files) { 
       HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; 
       if (hpf.ContentLength == 0) 
        continue; 

       //extensie nakijken. jpg, png, jpeg, of GIF. 
       if (MvcApplication.isImage(hpf.FileName)) { 
        //Image img = new Image(); 


        string savedFileName = Path.Combine(
         AppDomain.CurrentDomain.BaseDirectory + "uploads\\ONAS\\", 
         Path.GetFileName(hpf.FileName)); 
        FileInfo fi = new FileInfo(savedFileName); 

        int i = 1; 
        while (fi.Exists) { 
         fi = new FileInfo(savedFileName.Substring(0, savedFileName.Length - Path.GetFileName(savedFileName).Length) + Path.GetFileNameWithoutExtension(savedFileName) + " (" + i++ + ") " + Path.GetExtension(savedFileName)); 
        } 
        savedFileName = fi.DirectoryName + "\\" + fi.Name; 
        hpf.SaveAs(savedFileName); 

        using (Image Img = Image.FromFile(savedFileName)) { 
         //Size ThumbNailSize = NewImageSize(Img.Height, Img.Width, 79); 
         Size NewSize = VerkleinMaxHoogte(Img.Size, 79); 

         using (Image ImgThnail = new Bitmap(Img, NewSize.Width, NewSize.Height)) { 
          //string ss = savedFileName.Substring(0, savedFileName.Length - Path.GetFileName(savedFileName).Length) + Path.GetFileNameWithoutExtension(savedFileName) + "-thumb" + Path.GetExtension(savedFileName); 
          ImgThnail.Save(savedFileName + ".tmp", Img.RawFormat); 
          ImgThnail.Dispose(); 
         } 
         Img.Dispose(); 
        } 
        System.IO.File.Delete(savedFileName); 
        FileInfo f = new FileInfo(savedFileName + ".tmp"); 
        f.MoveTo(savedFileName); 


       } else { 
        ModelState.AddModelError("ONAS_Logo", "Het geuploadde bestand is geen afbeelding. "); 

       } 

       //r.Add(new ViewDataUploadFilesResult() { 
       // Name = savedFileName, 
       // Length = hpf.ContentLength 
       //}); 
      } 
     } 

     // return View("UploadedFiles", r); 

     return View(); 
    } 


    [NonAction] 
    public Size VerkleinMaxHoogte(Size orig, double height) { 
     double tempval = height/orig.Height; 

     return new Size(Convert.ToInt32(tempval * orig.Width), Convert.ToInt32(height)); 
    } 

в global.asax

public static bool isImage(string s) { 
     if (s.EndsWith(".jpg", true, null) || s.EndsWith(".jpeg", true, null) || s.EndsWith(".gif", true, null) || s.EndsWith(".png", true, null)) { 
      return true; 
     } 
     return false; 
    } 

так, как я это сделать:

  1. я получаю файл из браузера
  2. проверить, если это изображение
  3. Я проверяю, существует ли файл, и если да, измените имя файла соответственно
  4. я сохранить файл на диске (IO, медленный)
  5. открыть файл как образ
  6. Я рассчитать ширину и высоту с помощью метода VerkleinMaxHoogte
  7. я создаю эскиз и сохранить его с расширением TMP
  8. я удалить исходный файл
  9. переименовать эскиз к исходному имени файла (это то, что я хочу)

Как это сделать быстрее?

ответ

2

Вы можете всегда использовать HttpPostedFile.InputStream и Image.FromStream метод комбинирования # 4 & # 5. Это также устранит # 8 & # 9.

+0

хорошо пункт. я искал что-то вроде этого, но не нашел его :) – Stefanvds

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