我使用文件上传选项上传文件。我在POST方法中直接将此文件从View发送到Controller,如
[HttpPost]
public ActionResult Page2(FormCollection objCollection)
{
HttpPostedFileBase file = Request.Files[0];
}
假设我正在上传记事本文件。我如何阅读此文件&将此文本附加到字符串生成器,而不保存该文件....
我知道在SaveAs
此文件后,我们可以读取此文件。但如何在不保存的情况下从HttpPostedFileBase
读取此文件?
答案 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(); }