HttpPostedFileからバイト配列を作成する方法


155

FromBinaryメソッドを持つ画像コンポーネントを使用しています。入力ストリームをバイト配列に変換する方法を知りたい

HttpPostedFile file = context.Request.Files[0];
byte[] buffer = new byte[file.ContentLength];
file.InputStream.Read(buffer, 0, file.ContentLength);

ImageElement image = ImageElement.FromBinary(byteArray);

別の.aspxページにファイルを投稿するにはどうすればよいですか?
Shivi 2015年

この行はありませんfile.InputStream.Read(buffer、0、file.ContentLength); 入力ストリームからのバイトでバッファを埋めますか?以下の回答で@Wolfwyrdが言及しているように、BinaryReader.ReadBytes(...)を使用する必要があるのはなぜですか?ImageElement.FromBinary(buffer);にならない 問題を解決する?
Srinidhi Shankar

回答:


290

BinaryReaderオブジェクトを使用して、次のようにストリームからバイト配列を返します。

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}

1
jeffが以下に述べるように、b.ReadBytes(file.InputStream.Length); byte []である必要がありますbinData = b.ReadBytes(file.ContentLength); .Lengthは長いのに対し、ReadBytesはintを期待しているからです。
スポンジボーイ、

BinaryReaderを閉じることを忘れないでください。
Chris Dwyer

魅力のように働きます。(ジェフ、スポンジボーイ、クリスのコメント付きの)この簡単な解決策をありがとう!
David

29
バイナリリーダーを閉じる必要はありません。使い捨てでリーダーを自動的に閉じるための使用方法があるためです
BeardinaSuit

1
これが.docxファイルで機能しない理由に関するアイデアはありますか?stackoverflow.com/questions/19232932/...
wilsjd

25
BinaryReader b = new BinaryReader(file.InputStream);
byte[] binData = b.ReadBytes(file.InputStream.Length);

2行目は

byte[] binData = b.ReadBytes(file.ContentLength);

12

ファイルInputStream.Positionがストリームの最後に設定されている場合は機能しません。私の追加の行:

Stream stream = file.InputStream;
stream.Position = 0;

3

あなたの質問では、バッファとbyteArrayの両方がbyte []のようです。そう:

ImageElement image = ImageElement.FromBinary(buffer);

2

stream.copytoの前に、stream.positionを0にリセットする必要があります。その後、正常に動作します。


2

Webページv2を使用している場合、画像にはWebImageクラスを使用します

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.