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

时间:2013-04-16 06:17:42

标签: file c#-4.0 file-io asp.net-mvc-2 stream

我使用文件上传选项上传文件。我在POST方法中直接将此文件从View发送到Controller,如

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

假设我正在上传记事本文件。我如何阅读此文件&将此文本附加到字符串生成器,而不保存该文件....

我知道在SaveAs此文件后,我们可以读取此文件。但如何在不保存的情况下从HttpPostedFileBase读取此文件?

4 个答案:

答案 0 :(得分:72)

这可以使用 httpPostedFileBase 类按照指定的here

返回 HttpInputStreamObject 来完成

您应该将流转换为字节数组,然后才能读取文件内容

请参阅以下链接

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

希望这有帮助

更新:

  

从HTTP调用获得的流是只读的顺序   (不可搜索)和FileStream是可读/可搜索的。你会   首先需要将整个流从HTTP调用读入一个字节   然后从该数组创建FileStream。

取自here

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

答案 1 :(得分:40)

另一种方法是使用StreamReader。

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

答案 2 :(得分:9)

对Thangamani Palanisamy的回答略有改动,允许二元读者处理并在他的评论中纠正输入长度问题。

string result = string.Empty;

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

答案 3 :(得分:0)

byte []个数据; using(Stream inputStream = file.InputStream){MemoryStream memoryStream = inputStream作为MemoryStream;如果(memoryStream == null){memoryStream = new MemoryStream(); inputStream.CopyTo(memoryStream); } data = memoryStream.ToArray(); }