68

我正在使用文件上传选项上传文件。我直接在 POST 方法中将此文件从视图发送到控制器,例如,

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

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

我知道在SaveAs这个文件之后,我们可以读取这个文件。但是我如何在不保存的情况下读取这个文件HttpPostedFileBase

4

4 回答 4

80

这可以使用httpPostedFileBase类返回HttpInputStreamObject来完成,按照此处指定

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

请参考以下链接

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

希望这可以帮助

更新 :

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

取自这里

// 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);
于 2013-04-16T06:37:46.127 回答
45

另一种方法是使用 StreamReader。

public void FunctionName(HttpPostedFileBase file)
{
    string result = new StreamReader(file.InputStream).ReadToEnd();
}
于 2013-09-04T10:54:56.180 回答
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);
}
于 2016-10-28T12:07:26.333 回答
0

字节[] 数据;using(Stream inputStream=file.InputStream) { MemoryStream memoryStream = inputStream as MemoryStream; if (memoryStream == null) { memoryStream = new MemoryStream(); inputStream.CopyTo(memoryStream); } 数据 = memoryStream.ToArray(); }

于 2020-10-02T19:57:16.740 回答