は、私は、これは、ファイルを送信するための最小値であると思う:
using (var fileStream = File.Open(@"\file.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.destination.com/path");
request.Method = "POST"; // or PUT, depending on what the server expects
request.ContentLength = fileStream.Length; // see the note below
using (var requestStream = request.GetRequestStream())
{
int bytes;
byte[] buffer = new byte[1024]; // any reasonable buffer size will do
while ((bytes = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
requestStream.Write(buffer, 0, bytes);
}
}
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
}
}
catch (WebException ex)
{
// failure
}
}
注:HTTPは、あなたがデータを送信して「完了」しているときに知っておく方法が必要です。
- 例で使用されるように、我々が設定して何も
request.SendChunked
を送信する前に、ファイルのサイズを知っているので、request.ContentLength
を設定し、個々のサイズ を含むデータのチャンクを送信するためにこれを達成するための3つの方法があります。
- でもメモリバッファに書き込むように
request.AllowWriteStreamBuffering
を設定していますが、コンパクトなフレームワークでその分のメモリを無駄にすることはお勧めしません。
他の質問/サイトの提案でうまくいかなかったものを指定できますか?それ以外の場合は、ここの回答があなたのために働かない可能性があります。 –
確かに - XMLファイルやテキストファイルをどこに送信しているのかわかりました。あるいは、データ構造をファイルにシリアライズする(protobufのような)ものもあります。また、マルチパートプロトコルを使用する場所もいくつか見てきましたが、コンパクトなフレームワークはそれをサポートしていません。 – Kyver
ほとんどの例は 'multipart/form-data'を含んでいます。自分で作成することはできますが、実際にファイルを送信する必要はありません。私は例を投稿します。 –