jQuery+ajax使用FormData方式上传文件到服务器

表单代码:

<div style="margin-left: 30px">
     <input type="button" value="选择咒语音频" class="btn btn-primary btn-sm"   onclick="javascript:jQuery('input[name=\'audioFile\']').click();" />
     <input name="audioFileName" type="hidden" readonly /> <!--隐藏显示的文件名input框-->
     <input type="file" id="audioFile" name="audioFile" style="display: none;" onchange="javascript:jQuery('input[name=\'audioFileName\']').val(this.files[0].name);" accept=".ogg,.mp3,.mp4,.wave,.aac"/>
     <button id="uploadAudioFile" type="button" class="btn btn-primary btn-sm">上传</button>
     <br>
     <span style="font-size:10px">文件大小不能超过1MB</span>
 </div>

这里没有用form的方式,三个input主要是为了定义出不同于原生的文件选择按钮样式,具体样式效果如下:
在这里插入图片描述

js代码:
new了一个FormData对象,但是不能用new FormData("#id")的方式。然后append一个key-value,这里的key一定要同后台保持一致,不然后台是会获取不到file文件的。而$("#picFile")[0].files[0]就是拿到type为file的input的具体文件,由于可能存在多选择文件问题,所以这里是[0]取第一个。
再通过ajax异步上传,一定要注意dataType:'json’这一句不能少,不然会被自己坑死的。然后就能上传成功了,拿到服务器返回的filename可以用作显示操作等等。

$("#uploadPicFile").click(function () {
            var formData = new FormData();
            formData.append("file", $("#picFile")[0].files[0]);
            //alert("fileName === " + $("#picFile")[0].files[0].name);
            $.ajax({
                url: ".....",
                type: "POST",
                data: formData,
                dataType:"json",
                processData: false,
                contentType: false,
                success : function(result) {
                    alert("success = " + result.success + " filename = " + result.filename);
                    if (result.success) {
                        alert("上传成功");
                    } else {
                        alert("图片上传异常");
                    }
                },
                error : function() {
                    alert("服务器请求异常");
                }
            });
        });

这种方式比较简单吧,但是缺点就是对于上传过程、文件大小限制等需要自己来实现相关的逻辑吧。
不过暂时先用这种原始方式练手吧,之前也看过bootstrap fileinput的文件上传插件,配置简单,但是使用的时候就是会出现一些乱七八糟的问题,所以又放弃了。后面再去想想看看其他的文件上传框架好了。哎哎哎~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值