如何创建HttpPostedFileBase实例(或其继承类型)

时间:2011-09-19 05:10:03

标签: c# .net asp.net-mvc asp.net-mvc-3

目前我有byte[]包含图像文件的所有数据,只想构建HttpPostedFileBase的实例,以便我可以使用现有方法,而不是创建新的重载

public ActionResult Save(HttpPostedFileBase file)

public ActionResult Save(byte[] data)
{
    //Hope I can construct an instance of HttpPostedFileBase here and then
    return Save(file);

    //instead of writing a lot of similar codes
}

2 个答案:

答案 0 :(得分:42)

按如下方式创建派生类:

class MemoryFile : HttpPostedFileBase
{
Stream stream;
string contentType;
string fileName;

public MemoryFile(Stream stream, string contentType, string fileName)
{
    this.stream = stream;
    this.contentType = contentType;
    this.fileName = fileName;
}

public override int ContentLength
{
    get { return (int)stream.Length; }
}

public override string ContentType
{
    get { return contentType; }
}

public override string FileName
{
    get { return fileName; }
}

public override Stream InputStream
{
    get { return stream; }
}

public override void SaveAs(string filename)
{
    using (var file = File.Open(filename, FileMode.CreateNew))
        stream.CopyTo(file);
}
}

现在您可以传递此类的实例,其中包含HttpPostedFileBase。

答案 1 :(得分:1)

您无法手动创建HttpPostedFileBase或派生类(HttpPostedFile)的实例。这个类只应该由框架实例化。你为什么不摆脱采用字节数组的第二个控制器动作?这不是必需的。默认模型绑定器可以正常使用HttpPostedFileBase