![](/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.