Asp.Net Core-无法从Dropzone JS上传文件

时间:2020-04-04 17:31:43

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

我正在使用带dropzone js的asp.net core 2.2。

我正在尝试提交一个表格以及dropzone js中包含的文件。

我有一个输入文件字段(可以隐藏也可以不隐藏)。我想将dropzone文件分配给该字段并提交。但是“表单”字段始终为空。

代码如下:

MVC控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Add(ViewModels.Photo model)
{
    var files = HttpContext.Request.Form.Files; // this is also empty
    ....
}

MVC模型:

public class Photo
{
    ...

    public List<IFormFile> Files { get; set; }
}

HTML:

<form asp-action="Add" asp-controller="Photos" method="post" id="addForm" enctype="multipart/form-data">
    <div class="dropzone">
        <input asp-for="Files" type="file" multiple hidden/>
    </div>
    <button type="submit">Submit</button>
</form>

JS:

var e = "#addForm",
var t = new Dropzone(e, {
    maxFilesize: 1,
    acceptedFiles: ".png,.jpg,.jpeg",
    uploadMultiple: false,
    autoProcessQueue: false
});
t.on("addedfile", function (o) {
    $("#Files").files = t.files;
})

2 个答案:

答案 0 :(得分:1)

您可以使用该操作的其他方法签名

[HttpPost]
public ActionResult Add(HttpPostedFileBase file)
{
    //handle file.InputStream
}

此示例显示了一个一个地上传文件:https://gillesleblanc.wordpress.com/2017/01/25/integrating-dropzone-js-into-an-asp-net-mvc-site/

答案 1 :(得分:1)

我设法使事情正常进行,这是次要的修复。

我更改了以下代码

$("#Files").files = t.files;

$("#Files").files = t.hiddenFileInput.files;

t.files是dropzone捕获的文件数组,其中t.hiddenFileInput.files是dropzone捕获的文件的FileList对象。

$("#Files").files也是一个FileList对象,这就是t.files由于类型不匹配而无法工作的原因。

现在,它使用默认的提交机制提交表单字段以及文件。

相关问题