私はこのコードを使用して複数のファイルをアップロードしています。それはmodernhttpclientライブラリを使用します。C#:HttpClient、複数ファイルをMultipartFormDataContentとしてアップロードする際のファイルアップロードの進行状況
public async Task<string> PostImages (int platform, string url, List<byte []> imageList)
{
try {
int count = 1;
var requestContent = new MultipartFormDataContent();
foreach (var image in imageList) {
var imageContent = new ByteArrayContent (image);
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse ("image/jpeg");
requestContent.Add (imageContent, "image" + count, "image.jpg");
count++;
}
var cookieHandler = new NativeCookieHandler();
var messageHandler = new NativeMessageHandler (false, false, cookieHandler);
cookieHandler.SetCookies (cookies);
using (var client = new HttpClient (messageHandler)) {
client.DefaultRequestHeaders.TryAddWithoutValidation ("User-Agent", GetUserAgent (platform));
using (var r = await client.PostAsync (url, requestContent)) {
string result = await r.Content.ReadAsStringAsync();
System.Diagnostics.Debug.WriteLine ("PostAsync: " + result);
return result;
}
}
} catch (Exception e) {
System.Diagnostics.Debug.WriteLine (e.Message);
return null;
}
}
これでファイルをアップロードするときに進捗状況が必要です。私はグーグルで検索し、私はProgressStreamContentがストリームを取るコンストラクタを含んでいるので、私はストリーミングするMultipartFormDataContentを変換し、そのコンストラクタでそれを使用しProgressStreamContent
https://github.com/paulcbetts/ModernHttpClient/issues/80
を使用する必要がありました。しかし、それは動作していません。アップロードに失敗します。私はそれが私のバックエンドが期待しているものではない、一緒にすべてのファイルのストリームなので、そのと思う。
public async Task<string> PostImages (int platform, string url, List<byte []> imageList)
{
try {
int count = 1;
var requestContent = new MultipartFormDataContent();
// here you can specify boundary if you need---^
foreach (var image in imageList) {
var imageContent = new ByteArrayContent (image);
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse ("image/jpeg");
requestContent.Add (imageContent, "image" + count, "image.jpg");
count++;
}
var cookieHandler = new NativeCookieHandler();
var messageHandler = new NativeMessageHandler (false, false, cookieHandler);
cookieHandler.SetCookies (RestApiPaths.cookies);
var stream = await requestContent.ReadAsStreamAsync();
var client = new HttpClient (messageHandler);
client.DefaultRequestHeaders.TryAddWithoutValidation ("User-Agent", RestApiPaths.GetUserAgent (platform));
var request = new HttpRequestMessage (HttpMethod.Post, url);
var progressContent = new ProgressStreamContent (stream, 4096);
progressContent.Progress = (bytes, totalBytes, totalBytesExpected) => {
Console.WriteLine ("Uploading {0}/{1}", totalBytes, totalBytesExpected);
};
request.Content = progressContent;
var response = await client.SendAsync (request);
string result = await response.Content.ReadAsStringAsync();
System.Diagnostics.Debug.WriteLine ("PostAsync: " + result);
return result;
} catch (Exception e) {
System.Diagnostics.Debug.WriteLine (e.Message);
return null;
}
}
これを行うにはどうすればよいですか?どんな助けもありがとう
ByteArrayContentではなく、MultiPartContentを使用する必要があります。 –
ファイルをバイト配列として使用しました。 – HeisenBerg
サーバーはバイト配列を受け付けません.HTMLサーバーはほとんどがマルチパート形式のエンコードされたコンテンツを必要とします。サーバーはデータの送信方法ではなく、どのようにデータを受け取るのですか? –