繁体   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