1. ホーム
  2. arrays

[解決済み] HttpPostedFileBaseをbyte[]に変換する。

2022-07-01 12:58:42

質問

MVCアプリケーションで、ファイルをアップロードするために次のコードを使用しています。

モデル

 public HttpPostedFileBase File { get; set; }

ビュー

@Html.TextBoxFor(m => m.File, new { type = "file" })

すべてうまくいっています。 しかし、結果フィールドをbyte[]に変換しようとしているのですが、どうすればよいのでしょうか?

コントローラ

 public ActionResult ManagePhotos(ManagePhotos model)
    {
        if (ModelState.IsValid)
        {
            byte[] image = model.File; //Its not working .How can convert this to byte array
        }
     }

どのように解決するのですか?

Darin が言うように、入力ストリームから読み取ることができます。しかし、すべてのデータが一度に利用可能であることに依存するのは避けなければなりません。.NET 4 を使用している場合、これは簡単です。

MemoryStream target = new MemoryStream();
model.File.InputStream.CopyTo(target);
byte[] data = target.ToArray();

に相当するものを書くのは簡単です。 CopyTo と同等のものを.NET 3.5で書くのは簡単です。重要なのは、あなたが HttpPostedFileBase.InputStream .

効率的な運用のために が可能です。 は、返されたストリームがすでに MemoryStream :

byte[] data;
using (Stream inputStream = model.File.InputStream)
{
    MemoryStream memoryStream = inputStream as MemoryStream;
    if (memoryStream == null)
    {
        memoryStream = new MemoryStream();
        inputStream.CopyTo(memoryStream);
    }
    data = memoryStream.ToArray();
}