![](/img/trans.png)
[英]Unable to map byte[] or byte[]? (nullable byte[]) using AutoMapper ForCtorParam function
[英]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才能使其工作?
至少有兩種方法可以做到這一點:
使用自定義類型轉換器 :
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>();
使用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.