javascript 使用jQuery AJAX 上传文件在ASP.NET核心MVC v3.1中不起作用[重复]

hwamh0ep  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(108)
    • 此问题在此处已有答案**:

jQuery Ajax File Upload(27个答案)
17小时前关门了。
重要提示:我收到了一些建议,可以按照this link来解决我的问题。但是,我已经在做这篇文章中建议的事情了。
我正在关注this文章,并尝试使用jQueryAJAX将图像文件上传到服务器。我正在尝试找到一种方法,以获取emp参数下HomeControllerUploadFileUsingJQueryAJAX操作方法内部的所有细节
下面是HomeController中的代码:

public IActionResult UploadFileUsingJQueryAJAX()
    {
        return View();
    }

    [HttpPost]
    public IActionResult UploadFileUsingJQueryAJAX(Employee emp)
    {
        return View();
    }

下面是UploadFileUsingJQueryAJAX视图中的代码

@{
    ViewData["Title"] = "Upload File Using jQuery AJAX";
}
<h1>@ViewData["Title"]</h1>
<form id="myForm" method="post" enctype="multipart/form-data" asp-action="UploadFileUsingJQueryAJAX" asp-controller="Home">
    <table>
        <tr>
            <td>First name:</td>
            <td><input type="text" id="txtFirstName" name="txtFirstName" /></td>
        </tr>
        <tr>
            <td>Last name:</td>
            <td><input type="text" id="txtLastName" name="txtLastName" /></td>
        </tr>
        <tr>
            <td>Photo:</td>
            <td><input type="file" id="photo" name="postedFile" /></td>
        </tr>
        <tr>
            <td>Photo:</td>
            <td><input type="button" value="Submit" onclick="AjaxFormSubmit();" /></td>
        </tr>
    </table>
</form>
@section Scripts {
    <script src="~/js/upload_file_using_jquery_ajax_script.js"></script>
}

以下是位于Models文件夹中的Employee类。

public class Employee
{
    public int EmpId { get; set; }
    public string FistName { get; set; }
    public string LastName { get; set; }
    public IFormFile Photo { get; set; }
}

下面是upload_file_using_jquery_ajax_script.js中所需的javascript

function AjaxFormSubmit() {
    var url = $('#myForm').attr('action');
    var firstName = $('#txtFirstName').val();
    var lastName = $('#txtLastName').val();
    var photo = $('#photo')[0].files[0];

    var model = {
        url: url,
        FirstName: firstName,
        LastName: lastName,
        Photo: photo
    };

    SubmitForm(firstName, lastName, photo);
}

function SubmitForm(firstName, lastName, photo) {
    $.ajax({
        type: 'POST',
        url: '/Home/UploadFileUsingJQueryAJAX',
        data: {
            FirstName: firstName,
            LastName: lastName,
            Photo: photo
        },
        dataType: 'json',
        cache: false,
        beforeSend: function (xhr) {
            xhr.setRequestHeader("XSRF-TOKEN",
                $('input:hidden[name="__RequestVerificationToken"]').val());
        },
        success: function (response) {
            console.log(response.responseText);
            if (response.status == "success") {
                //alert("File : " + response.filename + " is uploaded successfully");
                console.log(response.responseText);
            }
        },
        error: function (err) {
            alert("Error occurs" + err.responseText);
        }
    });
}

我在浏览器的控制台窗口中执行程序时出现以下错误。

值没有传递到控制器操作方法。经过一些修改后,看起来好像出了问题。控制器操作方法甚至没有命中。
经过一番分析,找到了this article,并相应地更改了代码。但是,没有运气。
已尝试通过访问一些Web资源(如thisthisthis)来解决此问题,但没有成功。
有人能帮我解决这个问题吗?事实上,根据要求,我必须上传和读取Excel文件。但我试图在这个程序中上传图像文件,因为我得到几乎所有的文章上传图像只,我想与文章保持一致,同时学习和理解的概念。请让我知道,如果我需要遵循一些额外的步骤,我需要遵循,如果我需要上传和读取Excel文件从控制器的行动方法。

hfsqlsce

hfsqlsce1#

您需要使用FormData在 AJAX 中上传文件并添加如下配置:

processData: false,
contentType: false,

请参考以下代码:

function AjaxFormSubmit() {
        var url = $('#myForm').attr('action');
        var firstName = $('#txtFirstName').val();
        var lastName = $('#txtLastName').val();
        var formData = new FormData()
        formData.append("FirstName",firstName);
        formData.append("LastName", lastName);
        formData.append("Photo", $('#photo')[0].files[0]);

        SubmitForm(formData);
    }

    function SubmitForm(FormData) {
        $.ajax({
            type: 'POST',
            url: '/Home/UploadFileUsingJQueryAJAX',
            data: FormData,
            dataType: 'json',
            cache: false,
            processData: false,
            contentType: false,
            beforeSend: function (xhr) {
                xhr.setRequestHeader("XSRF-TOKEN",
                    $('input:hidden[name="__RequestVerificationToken"]').val());
            },
            success: function (response) {
                console.log(response.responseText);
                if (response.status == "success") {
                    //alert("File : " + response.filename + " is uploaded successfully");
                    console.log(response.responseText);
                }
            },
            error: function (err) {
                alert("Error occurs" + err.responseText);
            }
        });
    }

演示:

顺便说一句:您在员工中将FirstName写成了FistName

相关问题