Не удалось загрузить фотографию с использованием объекта IFormFile в ASP.Net Core 2 с исключением нулевой ссылки - PullRequest
0 голосов
/ 01 июня 2018

Я попытался загрузить фотографию, используя IFormFile с помощью плагина почтальона.Но API не получил объект файла из тела запроса.Я пытался с и без [FromBody].

[HttpPost]
public async Task<IActionResult> Upload(int vId, IFormFile fileStream)
{
    var vehicle = await this.repository.GetVehicle(vId, hasAdditional: false);
    if (vehicle == null)
        return NotFound();
    var uploadsFolderPath = Path.Combine(host.WebRootPath, "uploads");
    if (!Directory.Exists(uploadsFolderPath))
        Directory.CreateDirectory(uploadsFolderPath);
    var fileName = Guid.NewGuid().ToString() + Path.GetExtension(fileStream.FileName);
    var filePath = Path.Combine(uploadsFolderPath, fileName);

    using (var stream = new FileStream(filePath, FileMode.Create))
    {
        await fileStream.CopyToAsync(stream);
    }

Ошибка показывает в этой строке:

    var fileName = Guid.NewGuid().ToString() + Path.GetExtension(fileStream.FileName);

Я понял, чтоон не получает файл, а я отправляю файл image.jpg с тем же ключом "fileStream".Кстати все остальное работает нормально.Я не нашел решения, чтобы решить эту проблему.Если кто-то может помочь мне с этим, пожалуйста, дайте мне знать.

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Наконец-то получили решение.На самом деле проблема была со старой версией почтальона Tabbed Postman - расширение REST Client chrome.После попытки с новым приложением почтальона это работало отлично.Спасибо всем, кто пытался решить эту проблему.Вот результат: введите описание изображения здесь

0 голосов
/ 01 июня 2018

Атрибут FromBody может использоваться только для одного параметра в подписи.Один из вариантов отправки int vId - через строку запроса и прочитать ее с атрибутом FromQuery .

Попробуйте это так

[HttpPost]
public async Task<IActionResult> Upload([FromQuery]int vId, [FromBody]IFormFile fileStream) 

Затем сделайте POST для URL api/yourController?vId=123456789, где тело содержит IFromFile

Обновление

Поскольку данные формы будут отправлены в виде значения ключа, попробуйте создать модель, содержащую ключи, и прочитать ее из тела

public class RequestModel
{
    public IFormFile fileStream { get; set; }
}

Затем прочитайте модель изтело

[HttpPost]
public async Task<IActionResult> Upload([FromBody]RequestModel model) 
...