0

我尝试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);

我发现它没有获取文件,而我正在发送具有相同 key 的 image.jpg "fileStream"。顺便说一句,其他一切都很好。我没有找到解决此问题的解决方案。如果有人可以帮助我,请告诉我。

在此处输入图像描述

4

2 回答 2

0

FromBody属性只能用于签名中的一个参数发送的一种选择int vId是通过查询字符串并使用FromQuery属性读取它。

像这样试试

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

然后将 POST 发送到api/yourController?vId=123456789正文包含IFromFile的 url

更新

由于表单数据将作为键值发送尝试并创建一个包含键的模型并从正文中读取它

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

然后从正文中读取模型

[HttpPost]
public async Task<IActionResult> Upload([FromBody]RequestModel model) 
于 2018-06-01T11:16:52.203 回答
-1

终于得到了解决方案。实际上问题出在旧版本的邮递员 Tabbed Postman - REST Client chrome 扩展上。尝试使用新的邮递员应用程序后,它工作得非常好。感谢所有试图解决这个问题的人。结果如下:在此处输入图像描述

于 2018-06-03T06:31:55.050 回答