Jassim Rahma Ответов: 1

Загрузка изображения с помощью postasync


Привет,

Я хотел бы загрузить изображение из моего проекта в мой веб-сервис.

Как я могу поместить изображение в свой PostAsync, чтобы загрузить его в свой веб-сервис PHP?


Спасибо,
Джассим

Что я уже пробовал:

Вот мой код:

byte[] fileBytes;

using (var fileStream = await imageEditor.GetStream())
{
    var binaryReader = new BinaryReader(fileStream);

    fileBytes = binaryReader.ReadBytes((int)fileStream.Length);
}

var imageBinaryContent = new ByteArrayContent(fileBytes);

var multipartContent = new MultipartFormDataContent();
multipartContent.Add(imageBinaryContent, "image");



и мой PostAsync выглядит так:


var client = new HttpClient();
client.BaseAddress = new Uri("https://my.domain.com/api/save_data.php");

client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var content = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("image", IMAGE_DATA_COMES_HERE)
});

var response = await client.PostAsync("https://my.domain.com/api/save.php", content);

1 Ответов

Рейтинг:
4

Richard Deeming

Вы не можете использовать FormUrlEncodedContent чтобы загрузить файл, вы должны использовать MultipartFormDataContent.

var content = new MultipartFormDataContent();
var imageContent = new StreamContent(await imageEditor.GetStream());
content.Add(imageContent, "image");

var response = await client.PostAsync("https://my.domain.com/api/save.php", content);


Jassim Rahma

но мне нужно передать больше одного параметра, как это:

var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string="">("student", Convert.Метод toString(student_number)),
новый KeyValuePair<string, string="">("Фото", STUDENT_PHOTO),
});

значит, я должен передать его как строку?

Richard Deeming

Вы не можете использовать FormUrlEncodedContent чтобы загрузить файл.

var content = new MultipartFormDataContent();

// Add the image:
var imageContent = new StreamContent(await imageEditor.GetStream());
content.Add(imageContent, "photo");

// Add another parameter:
content.Add(new StringContent(Convert.ToString(student_number)), "\"student\"");

Jassim Rahma

Да, это здорово. Спасибо.

Jassim Rahma

У меня есть еще один вопрос, Ричард.

Я пытаюсь передать более одного файла данных в дополнение к файлу, но он ничего не отправляет, хотя мой PHP-сервер отлично работает, когда я тестирую

мой PHP expect:


$photo = $_FILES["photo"]["tmp_name"];
$user = $_POST["user"];


но теперь я хочу добавить:


$ad = $_POST["ad"];


так оно и будет:


$ad = $_POST["ad"];
$photo = $_FILES["photo"]["tmp_name"];
$user = $_POST["user"];


вот что я пробовал, но не получилось:


var content = new MultipartFormDataContent();

// Add the image:
var imageContent = new StreamContent(await imageEditor.GetStream());
imageContent.Headers.ContentType = new MediaTypeHeaderValue("image/png");
content.Add(imageContent, "photo", "AdImage.png");

// Add another parameter:
content.Add(new StringContent(ad_id), "\"ad\"");
content.Add(new StringContent(App.getUserInfo("MyUserID").Result), "\"user\"");

Jassim Rahma

к сожалению, теперь все в порядке, это была проблема с бэкэндом PHP