お世話になります。
現在ASP.NET(C#)のMVCアプリから外部のサービスに画像をアップロードする処理を作成しています。
開発環境は以下になります。
Windows10
Visual Studio(2012)
.NET Framework(Ver4.6.2)
MSのサンプルを参考に実装しましたがアップロードには成功していません。
原因はリクエスト情報の区切り文字(boundary)がダブルクウォートで囲われている事です。
下記の「request」の「Content-Type」に設定されている区切り文字の値が
boundary="----------------------------74eee5798fec"
となっていますが、これがダブルクウォートで囲われない
boundary=----------------------------74eee5798fec
となればアップロードが成功しました。
※Fiddlerで強引にリクエスト情報を修正して試しました。
区切り文字にダブルクウォートを付与させない方法をご存じの方ご教授お願いします。
・MultipartFormDataContentクラスの仕様でダブルクウォートは付与されるようです。
・HttpWebRequestを使用すればダブルクウォートを付与させないことは可能なのですが、MSがHttpWebRequestの利用を推奨していないためHttpClientで実装しています。
C#
1var url = "https://XXXXXXXXXXXXXXXXXXXXXXXXX"; 2var requestMessage = new HttpRequestMessage(HttpMethod.Post, uri); 3requestMessage.Headers.Add("Ocp-Apim-Subscription-Key", accessKey); 4 5var image = File.ReadAllBytes("画像のファイルのパス"); 6 7var boundary = "74eee5798fec"; 8var content = new MultipartFormDataContent(boundary); 9content.Add(new ByteArrayContent(image), "image", "myimage"); 10requestMessage.Content = content; 11 12var httpClient = new HttpClient(); 13 14Task<HttpResponseMessage> httpRequest = httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseContentRead, CancellationToken.None); 15HttpResponseMessage httpResponse = httpRequest.Result; 16 17
request
1POST /openapi/message/upload.api HTTP/1.1 2Host: storage.worksmobile.com 3consumerKey:LQwDde6x8eV4ROOCOdSW 4authorization: Bearer AAAA67h9/36ItvAEea7G8ijrDeCy/22BO5IcP0/KkwZO6unIYET6xkmp3RLW 5x-works-apiid: jp1AqBWcedRFt 6Content-Length: 11410 7Content-Type: multipart/form-data; boundary="----------------------------74eee5798fec" 8 9------------------------------74eee5798fec 10Content-Disposition: form-data; name="resourceName"; filename="sample.png" 11Content-Type: application/octet-stream 12 13.PNG***(skip) 14------------------------------74eee5798fec--
回答1件
あなたの回答
tips
プレビュー