2010-08-30 40 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. 我原來的文件刪除
  10. 我縮略圖重命名爲原來的文件名(這是我想要的)

我怎麼做得更快?

回答

相關問題