Последние 2 дня я пытался создать систему загрузки изображений для моего сайта.Когда я пытаюсь сохранить загруженное изображение в «wwwroot» моего Api, все идет по плану, за исключением того, что я получаю пустое изображение в своей папке.
В бэкэнде я получаю имя файла, которое отправляю в веб-интерфейсе, но байтов самого изображения там нет.По какой-то причине данные потока, который я поместил в пост-вызове, отсутствуют, но я получаю имя файла в файле формы.
Редактировать :
Чтобы прояснить ситуацию с моим приложением, я работаю с Asp.Net Mvc в качестве внешнего интерфейса и Asp.Net Api в качестве внутреннего.Я знаю, что это не то, как вы должны использовать Asp.Net, но это школьный проект, и я должен сделать это так.Обычно я бы работал с Angular или чем-то еще, но сейчас это не вариант для меня.
Итак, я отправляю данные из Asp.Net Mvc (внешний интерфейс) в Asp.Net Api (внутренний интерфейс)) и я пытаюсь сделать это, отправив его в виде данных формы.Это означает, что нет реальной формы для отправки.
Это руководство, которое я пытался использовать: https://ilclubdellesei.blog/2018/02/14/how-to-upload-images-to-an-asp-net-core-rest-service-with-xamarin-forms/
Backend
ImageController:
[HttpPost("upload")]
public async Task<IActionResult> UploadImage([FromForm(Name = "file")] IFormFile file)
{
if (file.Length == 0)
return BadRequest("Empty file");
string imageName = file.FileName;
using (var fs = new FileStream("wwwroot/" + imageName, FileMode.Create, FileAccess.Write))
{
await file.CopyToAsync(fs);
}
return Ok();
}
Внешний интерфейс
Метод, который загружает 1 изображение в виде MemoryStream на сервер
private async Task<string> Upload(Stream image, string name, string contentType)
{
_httpClient = _clientFactory.CreateClient("ProjectApi");
HttpContent fileStreamContent = new StreamContent(image);
fileStreamContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") { Name = "file", FileName = name };
fileStreamContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
using (var formData = new MultipartFormDataContent())
{
formData.Add(fileStreamContent);
HttpResponseMessage response = await _httpClient.PostAsync("api/images/upload", formData);
var input = await response.Content.ReadAsStringAsync();
return input;
}
}
Контент, похоже, небыть пустым:
Имя файла было успешно отправлено в API, но байты изображения не были отправлены:
Структура после загрузки некоторых изображений без проверки размера файла формы (они пусты):