2011-09-19 42 views
19

目前我有一个byte[]包含一个图像文件的所有数据,只是想构建一个HttpPostedFileBase的实例,以便我可以使用现有的方法,而不是创造一个新的过载之一。如何创建一个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

您是否得到了解析存储在byte []中的文件的答案? Mine保留内容处置等。 – Devela

回答

36

创建一个派生类,如下所示:

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预期的实例。

+2

只是想创建后显示如何使用MemoryFile:'string filePath = Path.GetFullPath(“C:\\ images.rar”); FileStream fileStream = new FileStream(filePath,FileMode.Open); MemoryFile fileImage = new MemoryFile(fileStream,“application/x-rar-compressed”,“images.rar”);'' – Murat

1

不能手动创建HttpPostedFileBase或派生类(HttpPostedFile)的一个实例。这个类只应该由框架实例化。你为什么不摆脱需要一个字节数组的第二个控制器动作?这不是必需的。默认模型联编程序可以正常工作,其中一个采取HttpPostedFileBase

+1

js开发人员发布了字节[],当用户从剪贴板粘贴图像时,会发生此问题,而不是选择要上载的图像文件。 –

+0

@Danny Chen,js发送一个'byte []'?这似乎很奇怪。正在使用什么协议? –

+1

他发给我一个base64字符串,这个行为是由第三方js编辑器执行的。 –

相关问题