title: Thumbnail creation of uploaded image
body: <p>I want to upload multiple images and save it to a folder in my application and also thumbnails of the same images in a folder called Thumbnail. I uploaded and saved my images successfully in the Images folder. I want to save its thumbnail too.</p>
  
  <h2>In View</h2>
  
  <pre><code>&lt;form action="" method="post" enctype="multipart/form-data"&gt;
    @Html.Label("Select the property : ");
    @Html.DropDownList("Address", new SelectList(ViewBag.Address as System.Collections.IEnumerable), "---Select---",new { id = "add"})
    &lt;label for="file"&gt;Filename:&lt;/label&gt;
    &lt;input type="file" name="files" id="file" multiple="true"/&gt;
  
    &lt;input type="submit" /&gt;
  </code></pre>
  
  <h2>    </h2>
  
  <h2>In controller</h2>
  
  <pre><code>public class HomeController : Controller
      {
          PropertyAssessmentSystemEntities db = new PropertyAssessmentSystemEntities();
  
          public ActionResult Index()
          {
              var q = from pi in db.PropertyInfoes
                      select pi.Full_Address;
              ViewBag.Address = q.ToList();
              return View();
          }
  
          [HttpPost]
          public ActionResult Index(HttpPostedFileBase[] files,FormCollection c)
          {
              int no = 0,no1 =0;
              string path = Path.Combine(Server.MapPath("~/Images"), c["Address"].Replace(' ', '_'));
              string fn = "", fn1 = "";
              if (!Directory.Exists(path))
                  Directory.CreateDirectory(path);
              else
                  no = Directory.GetFiles(path).Length;
              foreach (var file in files)
              {
                  string fname = "img_" + no++ + file.FileName.Substring(file.FileName.LastIndexOf('.'));
                  string fname1 = "img_" + no1++ + file.FileName.Substring(file.FileName.LastIndexOf('.'));
                  fname1 = Path.Combine("Thumbnail", fname1);
                  fn1 = Path.Combine(path, fname1);
                  if (!Directory.Exists(fn1))
                      Directory.CreateDirectory(fn1);
                  else
                      no = Directory.GetFiles(fn1).Length;
  
                  fn = Path.Combine(path, fname);
                  file.SaveAs(fn);
                  Stream strm = new FileStream(fn, FileMode.OpenOrCreate);
                  GenerateThumbnails(0.05, strm, fn1);
              }
  
              return RedirectToAction("Index");
          }
  
          private void GenerateThumbnails(double scaleFactor, Stream sourcePath, string targetPath)
          {
              using (var image = System.Drawing.Image.FromStream(sourcePath))
              {
                  var newWidth = (int)(image.Width * scaleFactor);
                  var newHeight = (int)(image.Height * scaleFactor);
                  var thumbnailImg = new Bitmap(newWidth, newHeight);
                  var thumbGraph = Graphics.FromImage(thumbnailImg);
                  thumbGraph.CompositingQuality = CompositingQuality.HighQuality;
                  thumbGraph.SmoothingMode = SmoothingMode.HighQuality;
                  thumbGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
                  var imageRectangle = new Rectangle(0, 0, newWidth, newHeight);
                  thumbGraph.DrawImage(image, imageRectangle);
                  thumbnailImg.Save(targetPath,image.RawFormat);
              } }}
  </code></pre>
  
  <hr>
  
  <p>On executing this an error occurs in <code>thumbnailImg.Save(targetPath,image.RawFormat);</code>
  A generic error occurred in GDI+. Can any one pls help me to solve this??</p>