UWPからファイルのPOST送信に失敗
困っていること
UWPアプリケーションからサーバーサイドのPHPアプリケーションへファイルをポスト送信したいのですが、ファイルの送信に失敗します。
どう失敗するかというと、PHP側の$_FILES判定が常にfalseとなってしまうのです。
パラメーターは2つ送信しています。
- param1 は文字列値
- param2 はアップロードファイル
サーバーサイド(sample.php)では次のように判定を行っています
if($_FILES['param2'])
現状失敗するUWP側のコードは次のようになっています
private async Task PostSample()
{
const string POST_URL = "http://xxx.xxx.xxx.xxx/api/sample.php";
var multi = new HttpMultipartFormDataContent();
var param1 = new HttpStringContent("foo");
multi.Add(param1, "param1");
byte[] values = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
var param2 = new HttpStreamContent(new MemoryStream(values).AsInputStream());
param2.Headers.ContentDisposition = new Windows.Web.Http.Headers.HttpContentDispositionHeaderValue("form-data")
{
Name = "param2",
FileName = "piyo.dat"
};
multi.Add(param2);
var client = new HttpClient();
var res = await client.PostAsync(new Uri(POST_URL), multi);
var diag = new MessageDialog(res.ToString());
await diag.ShowAsync();
}
試したこと
外部ツール
GoogleChromeアプリの Advanced REST Client
では成功(if($_FILES['param2'])がtrue)しました。
Windows Formsで類似のコードを実行したところ成功しました
private async Task PostSample()
{
const string POST_URL = "http://xxx.xxx.xxx.xxx/api/sample.php";
var multi = new MultipartFormDataContent();
var param1 = new StringContent("foo");
multi.Add(param1, "param1");
byte[] values = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
var param2 = new StreamContent(new MemoryStream(values));
param2.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data")
{
Name = "param2",
FileName = "piyo.dat"
};
multi.Add(param2);
var client = new HttpClient();
var res = await client.PostAsync(POST_URL, multi);
MessageBox.Show(res.ToString());
}
従いまして、
UWP側のコードに誤りや不足がある、またはUWPの何らかの仕様が原因ではないかと推測しておりますが、原因がわかりません。
調査の方向性だけでも結構ですので、何かアドバイスを頂けますと幸いです。
環境
- クライアント
- Windows 10(14393) 64bit, .NET Framework 4.6.1
- サーバー
- Windows Server 2008 + IIS7.0
不適切な可能性がありますが、英語版のStackoverflowへも昨日投稿致しました。しかしながらViewがそもそもつかないようですのでこちらへも投稿させて頂きました。
不適切であれば削除致しますのでご指摘頂けますと幸いです。
https://stackoverflow.com/questions/40988582/post-transmission-of-file-fails-with-uwp