目前我有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
}
答案 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
。