Man*_*aju 61 file-io file stream c#-4.0 asp.net-mvc-2
我正在使用文件上传选项上传文件.我在POST方法中直接将此文件从View发送到Controller,如,
[HttpPost]
public ActionResult Page2(FormCollection objCollection)
{
HttpPostedFileBase file = Request.Files[0];
}
Run Code Online (Sandbox Code Playgroud)
假设,我正在上传记事本文件.我如何阅读此文件并将此文本附加到字符串生成器,而不保存该文件....
我知道在SaveAs
这个文件之后,我们可以读取这个文件.但是如何在HttpPostedFileBase
不保存的情况下读取此文件?
Tha*_*amy 75
这可以使用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);
Run Code Online (Sandbox Code Playgroud)
Ric*_* YS 42
另一种方法是使用StreamReader.
public void FunctionName(HttpPostedFileBase file)
{
string result = new StreamReader(file.InputStream).ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
Thangamani Palanisamy回答略有变化,允许Binary读者处理并在他的评论中纠正输入长度问题.
string result = string.Empty;
using (BinaryReader b = new BinaryReader(file.InputStream))
{
byte[] binData = b.ReadBytes(file.ContentLength);
result = System.Text.Encoding.UTF8.GetString(binData);
}
Run Code Online (Sandbox Code Playgroud)