0

私はwebapiに取り組んでいます。画像を最適化し、ここのフォルダーに保存しました。宛先フォルダーにアップロードする前に、画像を 1 つのフォルダーにアップロードしました。

1 つの画像を 3 つの異なるサイズ (大、サムネイル、中) に最適化していますが、画像サイズは 1 つのフォルダーに保存されているため、これらの画像をビュー ページに戻し、ビュー ページにバインドする必要があります。どうやってやるの?私はwebapiが初めてです。

ここに私のコントローラー

  public Task<HttpResponseMessage> Post()
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            var uploadFolder = HostingEnvironment.MapPath("~/App_Sprites/UploadFolder");
            uploadFolder = Path.Combine(uploadFolder, DateTime.Now.ToString("yyyyMMddhhmmssfff"));
            Directory.CreateDirectory(uploadFolder);
            var streamProvider = new PreserveFilenameMultipartFileStreamProvider(uploadFolder);

            return Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(t =>
            {
                foreach (var uploadedFile in Directory.GetFiles(uploadFolder))
                {
                    var thumbnail = Path.Combine(uploadFolder, "thumb-" + Path.GetFileName(uploadedFile));
                    var medium = Path.Combine(uploadFolder, "medium-" + Path.GetFileName(uploadedFile));
                    var large = Path.Combine(uploadFolder, "large-" + Path.GetFileName(uploadedFile));
                    ImageTools.Resize(uploadedFile, thumbnail, 80, 80);
                    ImageTools.Resize(uploadedFile, medium, 48, 48);
                    ImageTools.Resize(uploadedFile, large, 128, 128);
                }
                return Request.CreateResponse(HttpStatusCode.Accepted);
            });
        }
    }

そして私のクラスファイル

public class ImageTools
    {
        public static void Resize(string original, string output, int width, int height)
        {
            using (var image = Image.FromFile(original))
            using (var thumbnail = new Bitmap(width, height))
            using (var graphics = Graphics.FromImage(thumbnail))
            {
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                graphics.CompositingQuality = CompositingQuality.HighQuality;

                graphics.DrawImage(image, 0, 0, width, height);

                ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
                EncoderParameters encoderParameters;
                encoderParameters = new EncoderParameters(1);
                encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
                thumbnail.Save(output, info[1], encoderParameters);
            }
        }
    }

保存用のクラスファイル

public class PreserveFilenameMultipartFileStreamProvider : MultipartFileStreamProvider
        {
            public PreserveFilenameMultipartFileStreamProvider(string rootPath)
                : base(rootPath)
            {
            }

            public override string GetLocalFileName(HttpContentHeaders headers)
            {
                return headers.ContentDisposition.FileName.Replace("\"", "");
            }
        }

最後に私のレイアウトページ

@using (Html.BeginRouteForm("DefaultApi", new { httproute = "", controller = "Upload" }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="image" multiple="multiple" accept="image/*" />
    <button type="submit">Upload</button>
}

ここで、フォルダーに画像がありましたが、これらの画像も保存する必要があります。それらをレイアウトページにバインドする必要があります。どうすればよいですか?

4

2 に答える 2

0

上記の質問のように、問題ありません。品質オプションで増加していると思います。単純に行う必要があるのは、品質を下げて画像をアップロードし、一度確認するだけです

 public static void Resize(string original, string output, int width, int height)
        {
            using (var image = Image.FromFile(original))
            using (var thumbnail = new Bitmap(width, height))
            using (var graphics = Graphics.FromImage(thumbnail))
            {
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.SmoothingMode = SmoothingMode.HighQuality;
                graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
                graphics.CompositingQuality = CompositingQuality.HighQuality;

                graphics.DrawImage(image, 0, 0, width, height);

                ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
                EncoderParameters encoderParameters;
                encoderParameters = new EncoderParameters(1);
                encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 80L);
                thumbnail.Save(output, info[1], encoderParameters);
            }
        }
于 2012-10-11T06:17:27.703 に答える
0

上記の質問のように、実装のコーディングを実装するために上記の質問のようにフォローして探すのに役立つサンプルサイトがあります

http://www.codeproject.com/Articles/379980/Fancy-ASP-NET-MVC-Image-Uploader?msg=4389108#xx4389108xx

于 2012-10-05T15:43:47.043 に答える