0

MVC3を使用してWebサーバー上の画像を処理するためのいくつかの最良のアプローチは何ですか。これに関するベストプラクティスはありますか?画像を処理するということは、ユーザーが写真をWebサーバーにアップロードし、ディスクに保存し、必要に応じてページに表示できるようにすることを意味します。

4

1 に答える 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 に答える