2011-09-19 65 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編輯器執行的。 –

相關問題