Как использовать httpClient.postAsync для загрузки изображения или байтов [] в UWP

поэтому мне нужно загрузить изображение в мою базу данных Mysql вместе с некоторыми другими строками, такими как имя для примера …
Я был в состоянии добавить имя в Mysql DB, но я не могу сделать это для изображения.
Я преобразовал изображение в байт [] и застрял сейчас ..
вот код, который я использовал

private Stream stream = new MemoryStream();
private CancellationTokenSource cts;

public MainPage()
{
this.InitializeComponent();
}

private async void buttonUpload_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker open = new FileOpenPicker();
open.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
open.ViewMode = PickerViewMode.Thumbnail;

// Filter to include a sample subset of file types
open.FileTypeFilter.Clear();
open.FileTypeFilter.Add(".bmp");
open.FileTypeFilter.Add(".png");
open.FileTypeFilter.Add(".jpeg");
open.FileTypeFilter.Add(".jpg");

// Open a stream for the selected file
StorageFile file = await open.PickSingleFileAsync();

// Ensure a file was selected
if (file != null)
{
// Ensure the stream is disposed once the image is loaded
using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read))
{
BitmapImage bitmapImage = new BitmapImage();
await bitmapImage.SetSourceAsync(fileStream);
fileStream.AsStream().CopyTo(stream);
img.Source = bitmapImage;
}
}
}

private async void submit_Click(object sender, RoutedEventArgs e)
{Uri uri = new Uri("http://localhost/mydatabase/add.php");
HttpClient client = new HttpClient();
HttpStreamContent streamContent = new HttpStreamContent(stream.AsInputStream());
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Content = streamContent;
HttpResponseMessage response = await client.PostAsync(uri, streamContent).AsTask(cts.Token);}

0

Решение

Ты можешь использовать Класс HttpStreamContent для загрузки потока прямо на ваш веб-сервер. Например:

private Stream stream = new MemoryStream();
private CancellationTokenSource cts;

private async void SelectImage(object sender, RoutedEventArgs e)
{
FileOpenPicker open = new FileOpenPicker();
open.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
open.ViewMode = PickerViewMode.Thumbnail;

// Filter to include a sample subset of file types
open.FileTypeFilter.Clear();
open.FileTypeFilter.Add(".bmp");
open.FileTypeFilter.Add(".png");
open.FileTypeFilter.Add(".jpeg");
open.FileTypeFilter.Add(".jpg");

// Open a stream for the selected file
StorageFile file = await open.PickSingleFileAsync();

// Ensure a file was selected
if (file != null)
{
// Ensure the stream is disposed once the image is loaded
using (IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read))
{
BitmapImage bitmapImage = new BitmapImage();
await bitmapImage.SetSourceAsync(fileStream);
fileStream.AsStream().CopyTo(stream);
img.Source = bitmapImage;
}
}
}

private async void UploadImage(object sender, RoutedEventArgs e)
{
Uri uri = new Uri("you web uri");
HttpClient client = new HttpClient();
HttpStreamContent streamContent = new HttpStreamContent(stream.AsInputStream());
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Content = streamContent;
HttpResponseMessage response = await client.PostAsync(uri, streamContent).AsTask(cts.Token);
}

Как мы уже обсуждали в вашем другом вопросе, вы можете обратиться к официальному Образец HttpClient, Сценарий 5 о публикации потока.

Для клиентского приложения мы можем просто правильно загрузить поток файлов, а главное, вам нужно будет реализовать функцию декодирования изображений и сохранить в mysql на вашем сервере.

Кстати, вы задали тот же вопрос загрузить изображение в базу данных mysql с помощью приложения windows universal Однажды, и я видел ваш последний комментарий к моему ответу, я не буду обновлять свой ответ в этом случае, надеюсь, это именно то, о чем вы просили.

1

Другие решения

Попробуйте это работает для меня:

частная статическая асинхронная загрузка задач (строка actionUrl) {

Image newImage = Image.FromFile(@"Absolute Path of image");
ImageConverter _imageConverter = new ImageConverter();
byte[] paramFileStream= (byte[])_imageConverter.ConvertTo(newImage, typeof(byte[]));var formContent = new MultipartFormDataContent
{
//send form text values here
{new StringContent("value1"),"key1"},
{new StringContent("value2"),"key2" },
// send Image Here
{new StreamContent(new MemoryStream(paramFileStream)),"imagekey","filename.jpg"}
};

var myHttpClient = new HttpClient();
var response = await myHttpClient.PostAsync(actionUrl.ToString(), formContent);
string stringContent = await response.Content.ReadAsStringAsync();

обратный ответ;
}

0

По вопросам рекламы [email protected]