Теперь я настроил публикацию фотографий UWP для части веб-API, которая использует HttpClient.
Uri uri = new Uri("http://localhost:50040/api/Upload");
IInputStream inputStream = await photoFile.OpenAsync(FileAccessMode.Read);
HttpMultipartFormDataContent multipartContent = new HttpMultipartFormDataContent();
multipartContent.Add(new HttpStreamContent(inputStream), "myFile", photoFile.Name);
Windows.Web.Http.HttpClient newclient = new Windows.Web.Http.HttpClient();
Windows.Web.Http.HttpResponseMessage response = await client.PostAsync(uri, multipartContent);
Но я не знаю, как настроить серверную часть, которая является моим основным веб-API .NET, чтобы получить изображение, которое публикуется из моего приложения UWP. Пожалуйста, помогите мне, спасибо.
But I don't know how to set for the server side which is my .NET core web api
Пожалуйста, обратитесь к Официальное руководство по загрузке файлов для создания вашей серверной части. Например, добавьте метод POST, как показано в следующем примере кода, чтобы получить файл, отправленный клиентом UWP, с кодом клиента, который вы показали выше.
// POST api/values
[HttpPost]
public async Task<IActionResult> Post(IFormFile myFile)
{
// full path to file in temp location, you could change this
var filePath = Path.GetTempFileName();
if (myFile.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await myFile.CopyToAsync(stream);
}
}
// process uploaded files
// Don't rely on or trust the FileName property without validation.
return Ok(new { filePath, myFile.Length });
}
Более подробно вы можете также сослаться на официальный образец.
@xiaozhi, я не знаю, как вы отправляете сообщения от почтальона. Но этот фрагмент кода работает на моей стороне. Вам нужно предоставить весь код на стороне сервера и снимок экрана почтальона, чтобы я мог отслеживать.
В контроллере веб-API
public IHostingEnvironment _environment;
public UploadFilesController(IHostingEnvironment environment) // Create Constructor
{
_environment = environment;
}
[HttpPost("UploadImages")]
public Task<ActionResult<string>> UploadImages([FromForm]List<IFormFile> allfiles)
{
string filepath = "";
foreach (var file in allfiles)
{
string extension = Path.GetExtension(file.FileName);
var upload = Path.Combine(_environment.ContentRootPath, "ImageFolderName");
if (!Directory.Exists(upload))
{
Directory.CreateDirectory(upload);
}
string FileName = Guid.NewGuid() + extension;
if (file.Length > 0)
{
using (var fileStream = new FileStream(Path.Combine(upload, FileName), FileMode.Create))
{
file.CopyTo(fileStream);
}
}
filepath = Path.Combine("ImageFolderName", FileName);
}
return Task.FromResult<ActionResult<string>>(filepath);
}
В yourpage.xaml.cs
using Windows.Storage;
using Windows.Storage.Pickers;
.....
StorageFile file;
......
private async void btnFileUpload_Click(object sender, RoutedEventArgs e) // Like Browse button
{
try
{
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".png");
file = await openPicker.PickSingleFileAsync();
if (file != null)
{
//fetch file details
}
}
catch (Exception ex)
{
}
}
//When upload file
var http = new HttpClient();
var formContent = new HttpMultipartFormDataContent();
var fileContent = new HttpStreamContent(await file.OpenReadAsync());
formContent.Add(fileContent, "allfiles", file.Name);
var response = await http.PostAsync(new Uri("Give API Path" + "UploadImages", formContent);
string filepath = Convert.ToString(response.Content); //Give path in which file is uploaded
Надеюсь, этот код поможет вам ...
Но помните, что строка formContent.Add(fileContent, "allfiles", file.Name);
важна, а allfiles
- это имя параметра для выборки файлов в методе веб-API "public Task<ActionResult<string>> UploadImages([FromForm]List<IFormFile> **allfiles**)"
.
Спасибо!!!
Когда я использую это, чтобы попробовать, он сказал внутреннюю ошибку http 500, когда я попытался опубликовать изображение в моем веб-API с помощью почтальона.