1

アップロードコントロールで画像をアップロードし、その画像をサムネイルに変換し、ファイルの実際の画像を画像フォルダーに保存し、サムネイル画像をサムネイル画像フォルダーに保存します asp.net-mvc3

4

1 に答える 1

1

ImageResizerというサードパーティのライブラリを使用しています。画像のアップロードと品質の維持に苦労しましたが、このライブラリは私を大いに助けてくれました。

あなたの見解では:

@model YourProject.ViewModels.ProductImageUploadCreateViewModel
@using (Html.BeginForm("Upload", "ProductImage", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
     <input type="file" name="ImageFile1" id="ImageFile1">
}

あなたのコントローラー:

public class ProductImageController : Controller
{
     [HttpPost]
     public ActionResult Upload(ProductImageUploadCreateViewModel viewModel)
     {
          if (!ModelState.IsValid)
          {
               return View(viewModel);
          }

          if (viewModel.ImageFile1 != null)
          {
               UploadImage(viewModel.ProductId, "1", viewModel.ImageFile1);
          }

          // Return to where ever...
     }
}

アップロード方法:

private void UploadImage(int productId, string imageNo, HttpPostedFileBase imageFile)
{
     string uploadPath = Server.MapPath("~/Assets/Images/Products/" + productId);
     if (!Directory.Exists(uploadPath))
     {
          Directory.CreateDirectory(uploadPath);
     }

     Dictionary<string, string> versions = new Dictionary<string, string>();
     versions.Add("_m", "width=150&height=150&scale=both&format=jpg");  // Medium size

     string filePrefix = productId + "_" + imageNo;
     versions.Add("_s", "width=90&height=90&scale=both&format=jpg");  // Small size
     versions.Add("_l", "width=300&height=300&scale=both&format=jpg");  // Large size

     foreach (string fileSuffix in versions.Keys)
     {
          // Generate a filename
          string fileName = Path.Combine(uploadPath, filePrefix + fileSuffix);

          // Let the image builder add the correct extension based on the output file type
          fileName = ImageBuilder.Current.Build(imageFile, fileName, new ResizeSettings(versions[fileSuffix]), false, true);
     }
}

彼らのウェブサイトを見てください、あなたがやり遂げることができるいくつかのサンプルがあります。これがお役に立てば幸いです:)

于 2012-05-11T12:26:52.977 に答える