簡體   English   中英

使用automapper從HttpPostedFileBase映射到Byte []

[英]Map from HttpPostedFileBase to Byte[] with automapper

我試圖上傳圖片並使用automapper將其從HttpPostedFileBase轉換為Byte []。 這是我的CreateMap:

            Mapper.CreateMap<HttpPostedFileBase, Byte[]>()
            .ForMember(d => d, opt => opt.MapFrom(s => 
                {
                    MemoryStream target = new MemoryStream();
                    s.InputStream.CopyTo(target);
                    return target.ToArray();
                }));

我在s上得到一個錯誤:帶有語句體的lambda表達式無法轉換為表達式樹。

那么我應該如何編寫我的CreateMap才能使其工作?

至少有兩種方法可以做到這一點:

  1. 使用自定義類型轉換器

     public class HttpPostedFileBaseTypeConverter : ITypeConverter<HttpPostedFileBase, byte[]> { public byte[] Convert(ResolutionContext ctx) { var fileBase = (HttpPostedFileBase)ctx.SourceValue; MemoryStream target = new MemoryStream(); fileBase.InputStream.CopyTo(target); return target.ToArray(); } } 

    用法:

     Mapper.CreateMap<HttpPostedFileBase, byte[]>() .ConvertUsing<HttpPostedFileBaseTypeConverter>(); 
  2. 使用ConstructUsing並以內聯方式執行:

     Mapper.CreateMap<HttpPostedFileBase, byte[]>() .ConstructUsing(fb => { MemoryStream target = new MemoryStream(); fb.InputStream.CopyTo(target); return target.ToArray(); }); 

這不是從文件上載中讀取字節的最佳方法,因為IIS在上載過程開始時分配上載文件的整個大小。 然后你的映射器分配另一個類似大小的字節(byte []數組是一個新變量),總內存使用量將是文件字節* 2。

我的建議是閱讀發布的文件流並將其寫入某處。 您可以在上傳后進行任何上傳后處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM