簡體   English   中英

沒有從文件上傳接收任何數據

[英]Not receiving any data from file upload

我正在嘗試使用Krajee Bootstrap 文件輸入上傳文件。 我正在使用 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" />

除此之外,您可以關注這篇MSDN 文章。

您可以從另一個按鈕訪問文件,然后像往常一樣使用 ajax 發布它們。 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);

    }

這確實有效,但我還沒有針對任何問題對其進行壓力測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM