使用HttpClient上传图片

我想使用HttpClient将文件上传到php脚本,以将其保存在Windows Phone 8.1应用程序的服务器上。

这是我从这篇文章得到的C#代码。

private async Task GetRawDataFromServer(byte[] data) { //Debug.WriteLine("byte[] data length:" + Convert.ToBase64String(data).Length); var requestContent = new MultipartFormDataContent(); // here you can specify boundary if you need---^ var imageContent = new ByteArrayContent(data); imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg"); requestContent.Add(imageContent, "image", "image.jpg"); using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://sofzh.miximages.com/c%23/ return( $outputfile ); } if (isset($_POST['image'])) { base64_to_jpeg($_POST['image'], image.jpg"); } else die("no image data found"); ?> 

但我总是得到的结果是“找不到数据”,尽管有一个图像文件。 我是否做错了将它作为POST参数传递?

好了经过几个小时的研究,我发现我应该从草稿中重新开始。 我使用以下C#代码模拟Html表单上传:

  private async Task UploadImage(StorageFile file) { HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://your.url.com/"); MultipartFormDataContent form = new MultipartFormDataContent(); HttpContent content = new StringContent("fileToUpload"); form.Add(content, "fileToUpload"); var stream = await file.OpenStreamForReadAsync(); content = new StreamContent(stream); content.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "fileToUpload", FileName = file.Name }; form.Add(content); var response = await client.PostAsync("upload.php", form); return response.Content.ReadAsStringAsync().Result; } 

我的php文件接收数据如下:

 '; if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.\n"; } else { echo "Possible file upload attack!\n"; } echo 'Here is some more debugging info:'; print_r($_FILES); ?>

现在它可以正常工作,我希望有人可以重用我的代码。