ajax异步将前端文件上传到后台

项目场景:

ajax异步将前端文件上传到后台


原因分析:

之前只会用$.get()$.post() 发送异步请求,而这两种方式向后台传输的数据都会被处理为string类型,文件类型为MultipartFile类型,不能被转为String。所以可回退到使用$.ajax({})发送异步请求
使用$.ajax({})发送异步请求,除了要写url、data、success、dataType,还要把type写上。
另外,还需要设置下面两个属性

processData: false,//阻止jquery对formData数据进行加工处理
contentType: false,//阻止jquery修改formData数据的类型

解决方案:

1、使用

var file = $("input[name=avatar]")[0].files[0];//获取上传的文件
var formData = new FormData(); //新建一个formData对象,以表单的形式传参
formData.append("username", $("#username").val());
formData.append("password", $("input[name=password]").val());
formData.append("avatar", file); 

向后台同时传输 文件类型、String类型数据
2、使用$.ajax({})发送异步请求


所有代码如下:

<head>
    <title>注册</title>
    <script src="${pageContext.request.contextPath}/js/jquery-1.8.3.js"></script>
    <script>
        var msgIsOk = false;
        var usernameIsOk = false;
        //编程式事件添加
        $(function () {
            $("#username").change(function () {
                checkName();
            });

            $("input[type=button]").click(function () {
                submitForm();
            });
        });

        /*ajax验证用户名是否重复*/
        function checkName() {
            $.get(
                "${pageContext.request.contextPath}/user/checkUsernameDuplicate",
                "username=" + $("#username").val(),
                    function (result) {
                        var commonVo = result;

                        if (!commonVo.status) {
                            //注册信息不合法
                            usernameIsOk = false;
                            $("#username").after("<span style='color: red'>" + commonVo.message + "</span>");
                        } else {
                            usernameIsOk = true;
                            $("#username").after("<span style='color: green'>" + commonVo.message + "</span>");
                        }
                    },
                    "json"
            );
        }

        function submitForm() {
            var file = $("input[name=avatar]")[0].files[0];//获取上传的文件
            var formData = new FormData(); //新建一个formData对象,以表单的形式传参
            formData.append("username", $("#username").val());
            formData.append("password", $("input[name=password]").val());
            formData.append("avatar", file);
            $.ajax({
                type:"post",
                url:"${pageContext.request.contextPath}/user/checkRegisterMsg",
                data: formData,
                processData: false,//阻止jquery对formData数据进行加工处理
                contentType: false,//阻止jquery修改formData数据的类型
                dataType:"json",
                success:function (result) {
                    var commonVo = result;
                    if (!commonVo.status){
                        $("#errorMessage").html(commonVo.message);
                    } else {
                        msgIsOk = true;
                    }
                }
            });
            if (msgIsOk && usernameIsOk) {
                $("form").submit();
            }
        }
    </script>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/register" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="username" id="username"><br>
    密码:<input type="password" name="password"><br>
    头像:<input type="file" name="avatar"><br>
    <input type="button" value="注册">
</form>

<a href="${pageContext.request.contextPath}/view/login.jsp">去登录</a>

<div style="color: red" id="errorMessage"></div>
</body>

本文参考:ajax实现前端文件上传到服务器

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值