Upload Image Using HttpClient

I want to upload a file using HttpClient to a php script in order to save it on the server in a Windows Phone 8.1 application.

Here is my C # code I received from this post .

private async Task<string> 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://www.x.net/"); var result = client.PostAsync("test/fileupload.php", requestContent).Result; return result.Content.ReadAsStringAsync().Result; } } 

And with this code, I retrieve data in a PHP script

 <? function base64_to_image( $imageData, $outputfile ) { /* encode & write data (binary) */ $ifp = fopen( $outputfile, "wb" ); fwrite( $ifp, base64_decode( $imageData ) ); fclose( $ifp ); /* return output filename */ return( $outputfile ); } if (isset($_POST['image'])) { base64_to_jpeg($_POST['image'], "image.jpg"); } else die("no image data found"); ?> 

But the result that I always get is "No data", although there is an image file. Am I doing something wrong by passing it as a POST parameter?

+5
source share
1 answer

Well, after several hours of research, I came to the conclusion that I should restart the project. I will simulate loading an HTML form using the following C # code:

  private async Task<string> 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; } 

And my php file for receiving data is as follows:

 <?php $uploaddir = 'uploads/'; $uploadfile = $uploaddir . basename($_FILES['fileToUpload']['name']); echo '<pre>'; 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); ?> 

Now it works as it should, and I hope someone can reuse my code.

+19
source

Source: https://habr.com/ru/post/1208815/


All Articles