php通过ajax上传多文件带图片预览

以前上传图片预览都会有跨域问题,现在新的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//保存临时上传文件

有问题留言 哈

此条目发表在服务器分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复