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

Posted

技术标签:

【中文标题】ASP.Net MVC - 从 HttpPostedFileBase 读取文件而不保存【英文标题】:ASP.Net MVC - Read File from HttpPostedFileBase without save 【发布时间】:2013-04-08 10:39:41 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

这可以使用 httpPostedFileBase 类返回 HttpInputStreamObject 根据指定的here

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

请参考以下链接

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

【讨论】:

meta.stackexchange.com/questions/8231/… P.S. b.ReadBytes() 想要一个 int 但 file.InputStream.Length 很长 但 file.InputStream.ContentLength 是一个 int 微小的修改,ContentLength 在 file.ContentLength 上,而不是 file.InputStream.ContentLength【参考方案2】:

另一种方法是使用 StreamReader。

public void FunctionName(HttpPostedFileBase file)

    string result = new StreamReader(file.InputStream).ReadToEnd();

【讨论】:

这将清空制作文件的流。Length = 0 同意,但在很多情况下这是可以的。 虽然 +1,但您并没有处理 IDisposable【参考方案3】:

对 Thangamani Palanisamy 答案的细微更改,允许处理二进制读取器并更正其 cmets 中的输入长度问题。

string result = string.Empty;

using (BinaryReader b = new BinaryReader(file.InputStream))

  byte[] binData = b.ReadBytes(file.ContentLength);
  result = System.Text.Encoding.UTF8.GetString(binData);

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于ASP.Net MVC - 从 HttpPostedFileBase 读取文件而不保存的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET WebForms 迁移到 ASP.NET MVC 的建议?

如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?

ASP.NET Web API 从 MVC 4 控制器失败

如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?

asp.net MVC - 我可以从类库中引用视图吗?

Asp.net mvc和asp.net有啥区别?