以前上传图片预览都会有跨域问题,现在新的html5和浏览器都支持新的玩法了,我这里说说思路但是没有完整的代码。
在form表单enctype数据编码multipart/form-data进行传输,主要是通过HTML5的FormData对象转变表单成需要的数据类型。multiple选多图。
<form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file" name="file" multiple="multiple" onchange="preview(this)"/> <button id="upload" type="button">upload</button> </form> <div class="picList"> </div>
//上传前图片预览 function preview(obj){ var length = obj.files.length; //多图上传时遍历文件信息(可以通过object.files查看) for (var i = 0; i < length; i++) {//循环输出预览图片 $('.picList').append('<img src="'+window.URL.createObjectURL(obj.files[i])+'"/>'); } } }
FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用。如果表单enctype属性设为multipart/form-data ,则会使用表单的submit()方法来发送数据,从而,发送数据具有同样形式。
//点击表单upload按钮提交执行脚本 $.ajax({ url: "upload.php", type: 'POST', cache: false, data: new FormData($("#uploadForm")[0]), processData: false, contentType: false, success: function (result) { }, error: function (err) { } });
这里要注意几点:
- processData设置为false。因为data值是FormData对象,不需要对数据做处理。
- <form>标签添加enctype=”multipart/form-data”属性。
- cache设置为false,上传文件不需要缓存。
- contentType设置为false。因为是由<form>表单构造的FormData对象,且已经声明了属性enctype=”multipart/form-data”,所以这里设置为false。
upload.php页面
print_r($_FILES['file']);//打印下文件是否上传成功 move_uploaded_file//保存临时上传文件
有问题留言 哈