如何在 C# 中将字节数组转换为 HttpPostedFileBase?

How to convert byte array to HttpPostedFileBase in C#?

我正在使用 asp.net MVC 网络应用程序。我的要求是将字节数组转换为 HttpPostedFileBase。我正在使用文件路径创建字节数组。

我参考了这个问题
(answer by https://whosebug.com/users/2678145/zerratar)

当我使用该代码时,将转换后的文件保存到服务器时出现异常。异常是方法或操作未实现。

我以为我收到了错误,因为转换后的文件的内容类型和文件名返回了 null。

所以我稍微改变了代码。

public class HttpPostedFileForStl : HttpPostedFileBase
{
    private readonly byte[] fileBytes;

    public HttpPostedFileForStl(byte[] fileBytes, string fileName)
    {
        this.fileBytes = fileBytes;
        this.InputStream = new MemoryStream(fileBytes);
        this.FileName = fileName;
    }

    public override int ContentLength => fileBytes.Length;
    public override string FileName { get; }
    public override string ContentType { get; } = "application/octet-stream";
    public override Stream InputStream { get; }
}

我正在将字节数组和文件名传递给此 class。 现在我在转换后的文件中获得了适当的文件名和内容类型,但异常仍然存在。有人可以帮忙吗?

 public class HttpPostedFileBaseCustom : HttpPostedFileBase
    {
        private byte[] _Bytes;
        private String _ContentType;
        private String _FileName;
        private MemoryStream _Stream;

        public override Int32 ContentLength { get { return this._Bytes.Length; } }
        public override String ContentType { get { return this._ContentType; } }
        public override String FileName { get { return this._FileName; } }

        public override Stream InputStream
        {
            get
            {
                if(this._Stream == null)
                {
                    this._Stream = new MemoryStream(this._Bytes);
                }
                return this._Stream;
            }
        }

        public HttpPostedFileBaseCustom(byte[] contentData, String contentType, String fileName)
        {
            this._ContentType = contentType;
            this._FileName = fileName;
            this._Bytes = contentData ?? new byte[0];
        }

        public override void SaveAs(String filename)
        {
            System.IO.File.WriteAllBytes(filename, this._Bytes);
        } 
    }