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); }