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 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">文件大小不能超过1MBspan>
 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的文件上传插件,配置简单,但是使用的时候就是会出现一些乱七八糟的问题,所以又放弃了。后面再去想想看看其他的文件上传框架好了。哎哎哎~

你可能感兴趣的:(前端学学)