通过单击多个输入文件中的删除链接来删除所选文件,然后提交给控制器的参数

时间:2018-12-28 03:10:33

标签: javascript asp.net-core file-upload asp.net-core-mvc

如何将文件发布到Controller中的参数? 我在Controller中有一个Action断点,我想看看是否可以通过Controller发布文件(删除了一些不需要的文件之后)。

现在,即使我按下了“上传”按钮,断点也会为我提供一个空值而不是文件名。

单击“提交”按钮后,控制台(F12)中显示的文件可以,但是Controller中的断点显示为空。

我应该怎么做才能将文件发布到我的控制器上?

1 个答案:

答案 0 :(得分:0)

  1. 您的ajax代码正在发送名称为fileList[]的文件,但是您的服务器需要一个名称为parameterIsHere的参数,并且类型应为UploadFiles
  2. 您似乎没有发送CSRF令牌

如何解决:

方法A:

  1. 服务器端:按如下所示更改操作方法(请注意类型和名称):

    [HttpPost]
    public IActionResult UploadAction(List<IFormFile> fileList)
    {
         // ...
    }
    
  2. 客户端:添加CSRF令牌并将字段名称更改为fileList

    function sendModifiesList(e) {
        e.preventDefault();
        fileList.forEach(function(file,idx) {
            formData.append(`fileList`, file);      //// name should be `fileList` 
        });
        formData.append("__RequestVerificationToken",$("form input[name='__RequestVerificationToken']").val());
        console.log("These files will be posted: ", formData.getAll("fileList"));
        /*************** EDIT *************************/
        // Get the url from the form's action attribute
        let url = document.forms[0].action;
        let request = new XMLHttpRequest();
        // Create a POST request
        request.open("POST", url);
        // Set up an onload handler to report status
        request.onload = function() {
            if (request.status == 200) {
                console.log("Uploaded!");
            } else {
                console.log("Error " + request.status + " occurred when trying to upload your file.");
            }
        };
        // Send the form to the server 
        request.send(formData);
        /************ END EDIT ***********************/
    };
    

方法B:

如果您不在乎名称,则只需使用HttpContext.Request.Form.Files即可获取文件:

    [HttpPost]
    public IActionResult UploadAction()
    {
         var files= HttpContext.Request.Form.Files;
         // ... 
    }