使IFormFile函数与模型

时间:2017-03-02 17:09:33

标签: asp.net-core-mvc .net-core

我的控制器中有一个函数,它接受ajax调用发送的文件并将其保存到指定的路径。我想知道如何使用模型来完成这项工作,因为我希望发送的数据不仅仅是图像。

视图模型:

public class PhotoViewModel
{
    // Other strings

    public IFormFile userimage { get; set; }
}

控制器:没有型号(工作)

[HttpPost]
public async Task<IActionResult> Post(IFormFile file)
{
    var filePath = Path.GetFullPath(@"C:\Users\me\documents\" + file.FileName);

    if (file.Length > 0)
    {
        using (var stream = new FileStream(filePath, FileMode.Create))
        {
            await file.CopyToAsync(stream);
        }
    }

    return StatusCode(200);
}

使用型号

尝试使用版本
[HttpPost]
public async Task<IActionResult> PhotoData(PhotoViewModel model)
{
    var filePath = Path.GetFullPath(@"C:\Users\me\documents\" + model.userimage.FileName);

    if (ModelState.IsValid)
    {
        if (model.userimage.Length > 0)
        {
            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await model.userimage.CopyToAsync(stream);
            }
        }
    }

    return StatusCode(200);
}

这种尝试并没有让我走得太远。通过设置断点,我可以看到它在设置filePath时失败,但我不确定如何使用该模型。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您收到的错误消息是什么以及您用来发送API请求的客户端代码是什么?

您必须使用FormData对象并使用所需的属性填充FormData对象。

var formData = new FormData();
formData.append(add PhotoViewModel properties)
formData.append(userimage, <file>);