私はHttpWebRequestとともにファイルを送信しています。私のファイルはFileUpload UIからのものになります。ここでは、HttpWebRequestと共にストリームを送信するために、ファイルアップロードをファイルストリームに変換する必要があります。 FileUploadをファイルストリームに変換するにはどうすればよいですか?
FileUpload.PostedFile.InputStreamはStreamを提供するため、次のコードを使用してバイト配列に変換します
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[input.Length];
//byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
入力ストリームを出力ストリームに直接パイプする方がよい場合があります。
inputStream.CopyTo(outputStream);
この方法では、再送信する前にファイル全体をメモリにキャッシュしません。たとえば、これをFileStreamに書き込む方法を次に示します。
FileUpload fu; // Get the FileUpload object.
using (FileStream fs = File.OpenWrite("file.dat"))
{
fu.PostedFile.InputStream.CopyTo(fs);
fs.Flush();
}
別のWebリクエストに直接書き込む場合は、次のようにします。
FileUpload fu; // Get the FileUpload object for the current connection here.
HttpWebRequest hr; // Set up your outgoing connection here.
using (Stream s = hr.GetRequestStream())
{
fu.PostedFile.InputStream.CopyTo(s);
s.Flush();
}
最初にメモリまたはディスクにキャッシュすることなく、入力ファイルを宛先ホストに直接ストリーミングするため、これはより効率的です。
FileUploadをFileStreamに変換することはできません。ただし、そのFileUploadのPostedFileプロパティからMemoryStreamを取得できます。次に、そのMemoryStreamを使用してHttpWebRequestに入力できます。
MemoryStream
を使用すると、FileUploadファイルをFileBytes
に直接配置できます(Tech Jerkからの簡単な回答)
using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes))
{
//do stuff
}
または、memoryStreamが必要ない場合
byte[] bin = FileUpload1.FileBytes;