MVC3を使用してWebサーバー上の画像を処理するためのいくつかの最良のアプローチは何ですか。これに関するベストプラクティスはありますか?画像を処理するということは、ユーザーが写真をWebサーバーにアップロードし、ディスクに保存し、必要に応じてページに表示できるようにすることを意味します。
質問する
656 次
1 に答える
1
通常、データベースに保存されたパスを使用してイメージをディスクに保存するのが、最善かつ最速の方法です。アップロードは通常の方法で処理できますが、役立つオープン ソース ライブラリがいくつかあります ( pluploadは、私が使用した中で最も機能が豊富なライブラリです)。
独自のActionResult
実装を作成し、表示するイメージを返すことができます。コントローラー アクションは、イメージを識別するために必要なパラメーターをすべて受け取ることができます。その後、ディスクからイメージを取得しImageResult
、アクションから を返すことができます。
これが基本的な実装です(クレジット):
public class ImageResult : ActionResult
{
public ImageResult() { }
public Image Image { get; set; }
public ImageFormat ImageFormat { get; set; }
public override void ExecuteResult(ControllerContext context)
{
// verify properties
if (Image == null)
{
throw new ArgumentNullException("Image");
}
if (ImageFormat == null)
{
throw new ArgumentNullException("ImageFormat");
}
// output
context.HttpContext.Response.Clear();
if (ImageFormat.Equals(ImageFormat.Bmp)) context.HttpContext.Response.ContentType = "image/bmp";
if (ImageFormat.Equals(ImageFormat.Gif)) context.HttpContext.Response.ContentType = "image/gif";
if (ImageFormat.Equals(ImageFormat.Icon)) context.HttpContext.Response.ContentType = "image/vnd.microsoft.icon";
if (ImageFormat.Equals(ImageFormat.Jpeg)) context.HttpContext.Response.ContentType = "image/jpeg";
if (ImageFormat.Equals(ImageFormat.Png)) context.HttpContext.Response.ContentType = "image/png";
if (ImageFormat.Equals(ImageFormat.Tiff)) context.HttpContext.Response.ContentType = "image/tiff";
if (ImageFormat.Equals(ImageFormat.Wmf)) context.HttpContext.Response.ContentType = "image/wmf";
Image.Save(context.HttpContext.Response.OutputStream, ImageFormat);
}
}
于 2012-07-23T14:08:42.947 に答える