web-dev-qa-db-ja.com

ASP.Net MVC-保存せずにHttpPostedFileBaseからファイルを読み取る

ファイルアップロードオプションを使用してファイルをアップロードしています。そして、POSTメソッドでViewからControllerにこのファイルを直接送信しています。

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

メモ帳ファイルをアップロードしているとします。このファイルを保存せずに、このファイルを読み取り、このテキストを文字列ビルダーに追加するにはどうすればよいですか...

このファイルをSaveAsした後、このファイルを読むことができます。しかし、保存せずにHttpPostedFileBaseからこのファイルを読み取るにはどうすればよいですか?

60

これは、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);
75

別の方法は、StreamReaderを使用することです。

public void FunctionName(HttpPostedFileBase file)
{
    string result = new StreamReader(file.InputStream).ReadToEnd();
}
41
Richard YS

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);
}
9
Stig