没有收到来自文件上传的任何数据

Not receiving any data from file upload

我正在尝试使用 Krajee Bootstrap File Input 上传文件。我正在使用 ASP.NET Core 2。这是我的 HTML:

<input id="fileFileUpload" type="file" />

这是我的 javascript 代码:

    $("#fileFileUpload").fileinput({
        showPreview: true,
        uploadAsync: false,
        uploadUrl: '/fileupload'
    });

这是我的控制器代码:

[HttpPost]
public JsonResult Index(List<IFormFile> files)
{
    // Do stuff
}

我在我的控制器方法上放置了一个断点,并且正在命中断点。但是 files 是空的。如何检索已上传的文件?

我认为该代码无效的第一个原因是您输入的内容未指定名称。

<input id="fileFileUpload" name="files" type="file" />

除此之外,您可以关注 this MSDN 文章。

您可以通过另一个按钮访问这些文件,然后像往常一样使用 ajax post 它们。 ButtonFileUpload8 是新按钮的 ID,file-8 是文件上传控件的 ID。您必须禁用上传按钮

这不是完美的代码,我只是把它放在一起展示它是如何完成的。

HTML:

    <form enctype="multipart/form-data">
        <div class="row mb-2">
            <div class="col-md-8">
                <div class="file-loading">
                    <input id="file-8" type="file" multiple>
                </div>
            </div>
        </div>
        <div class="btn-group btn-group-sm mr-1" role="group">
            <button id="ButtonFileUpload8" type="button" class="btn btn-sm">
                Blue
            </button>
        </div>

    </form>

Javascript(注意这会忽略启动器中设置的 post URL,因此调用 FileUploadKrajee 并使用 ajax):

    $("#file-8").fileinput({
        uploadUrl:"@Url.Action("FileUploadKrajee", "App")",
        uploadAsync: true,
        minFileCount: 1,
        maxFileCount: 5,
        overwriteInitial: false,
        initialPreview: "",
        initialPreviewConfig: "",
        uploadExtraData: "",
        showUpload: false
    });

    //  Click of upload button

    $("#ButtonFileUpload8").click(function () {
        var control = document.getElementById("file-8");
        var files = control.files;
        var formData = new FormData();

        for (var i = 0; i != files.length; i++) {
            formData.append("files", files[i]);
        }

        $.ajax({
            url: 'UploadFiles3',
            type: "POST",
            contentType: false, // Do not set any content header
            processData: false, // Do not process data
            data: formData,
            async: false,
            success: function (result) {
                if (result != "") {
                    alert(result);
                }
                control.files.value("");
            },
            error: function (err) {
                alert(err.statusText);
            }
        });
    });

然后在接收控制器中可以使用:

    public ActionResult UploadFiles3(List<IFormFile> files)
    {
        string nams = "";
        string funame = "";

        foreach (IFormFile source in files)
        {
            string filename = ContentDispositionHeaderValue.Parse(source.ContentDisposition).FileName.ToString();

            filename = this.EnsureCorrectFilename(filename);

            nams = nams + source.FileName.ToString();

            funame = "D:\Data\PointsAlign\Core\" + filename;

            FileStream output = System.IO.File.Create(funame);

            source.CopyTo(output);
        }

        return Json("Hi, Alster. Your files uploaded successfully " + nams);

    }

这确实有效,但我还没有针对任何问题对其进行压力测试