ASP.Net MVC – 从HttpPostedFileBase中读取文件而不保存

我使用file upload选项上传文件。 而我直接发送这个文件从视图到控制器在POST方法一样,

[HttpPost] public ActionResult Page2(FormCollection objCollection) { HttpPostedFileBase file = Request.Files[0]; } 

假设,我正在上传一个记事本文件。 我如何读取此文件并将此文本追加到string生成器,而不保存该文件….

我知道SaveAs这个文件后,我们可以读取这个文件。 但是如何从HttpPostedFileBase读取这个文件而不保存?

这可以使用httpPostedFileBase类按照这里指定的方式返回HttpInputStreamObject

您应该将该stream转换为字节数组,然后您可以读取文件内容

请参阅下面的链接

http://msdn.microsoft.com/en-us/library/system.web.httprequest.inputstream.aspx ]

希望这可以帮助

更新:

从HTTP调用获得的stream是只读顺序(不可search),FileStream是可读/可查找的。 您将需要首先从HTTP调用读取整个stream到一个字节数组,然后从该数组中创buildFileStream。

从这里采取

 // Read bytes from http input stream BinaryReader b = new BinaryReader(file.InputStream); byte[] binData = b.ReadBytes(file.ContentLength); string result = System.Text.Encoding.UTF8.GetString(binData); 

另一种方法是使用StreamReader。

 public void FunctionName(HttpPostedFileBase file) { string result = new StreamReader(file.InputStream).ReadToEnd(); } 

对Thangamani Palanisamy答案略作修改,允许二进制阅读器进行处理,并在其评论中纠正input长度问题。

 string result = string.Empty; using (BinaryReader b = new BinaryReader(file.InputStream)) { byte[] binData = b.ReadBytes(file.ContentLength); result = System.Text.Encoding.UTF8.GetString(binData); }