ファイルアップロードオプションを使用してファイルをアップロードしています。そして、POSTメソッドでViewからControllerにこのファイルを直接送信しています。
[HttpPost]
public ActionResult Page2(FormCollection objCollection)
{
HttpPostedFileBase file = Request.Files[0];
}
メモ帳ファイルをアップロードしているとします。このファイルを保存せずに、このファイルを読み取り、このテキストを文字列ビルダーに追加するにはどうすればよいですか...
このファイルをSaveAs
した後、このファイルを読むことができます。しかし、保存せずにHttpPostedFileBase
からこのファイルを読み取るにはどうすればよいですか?
これは、httpPostedFileBaseを使用して実行できます。クラスは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);
別の方法は、StreamReaderを使用することです。
public void FunctionName(HttpPostedFileBase file)
{
string result = new StreamReader(file.InputStream).ReadToEnd();
}
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);
}