php+ajax文件上传
<ol class=" list-paddingleft-2" style="list-style-type: decimal"><li>
<p>前端页面代码</p>
</li>
</ol>
<p> <br>
</p>
<p>
<!-- enctype 定义form要上传文件类型-->
</p>
<p>
<form action="" method="post" id="t" enctype="multipart/form-data">
</p>
<p>
<!--
</p>
<p>
multiple 作用是可以同时选中多个文件,多张图片
</p>
<p>
accept 指定input可以上传那种类型
</p>
<p>
onchange 当本元素动的时候,点击也属于 调用abs函数
</p>
<p>
-->
</p>
<p>
<br>
</p>
<p>
<input type="file" name='tables_a[]' id="tables" multiple accept="image/*" onchange="abs()">
</p>
<p>
<!-- 隐藏域 在上传完文件以后,把文件的地址赋给input tables_2 的值 -->
</p>
<p>
<input type="hidden" name='tables' id='tables_2'>
</p>
<p>
<!-- 提交表单 -->
</p>
<p>
<input type="submit" value="提交">
</p>
<p>
</form>
</p>
<p>
<br>
</p>
<p>
<!--jquery 必须有,一定要放在执行js的上方,可以是头部-->
</p>
<p>
<script src="/js/jquery-1.8.3.js"></script>
</p>
<p>
<script>
</p>
<p>
/*定义函数*/
</p>
<p>
function abs(){
</p>
<p>
/*获得文件*/
</p>
<p>
var fileArray = document.getElementById('tables').files;
</p>
<p>
/*初始化 FormData 对象 文件处理对象 序列化表单数据*/
</p>
<p>
var formData = new FormData();
</p>
<p>
/*给对象中添加文件信息,没有对象或者没有文件信息后台是得不到的*/
</p>
<p>
formData.append('file', fileArray);
</p>
<p>
/*jquery ajax 方法*/
</p>
<p>
$.ajax({
</p>
<p>
url: "ceshiphp.php",/*传向后台服务器文件*/
</p>
<p>
type: 'POST', /*传递方法 */
</p>
<p>
data:formData, /*要带的值,在这里只能带一个formdata ,不可以增加其他*/
</p>
<p>
//传递的数据
</p>
<p>
dataType : 'json', //传递数据的格式
</p>
<p>
async:false, //这是重要的一步,防止重复提交的
</p>
<p>
cache: false, //设置为false,上传文件不需要缓存。
</p>
<p>
contentType: false,//设置为false,因为是构造的FormData对象,所以这里设置为false。
</p>
<p>
processData: false,//设置为false,因为data值是FormData对象,不需要对数据做处理。
</p>
<p>
success: function (responseStr){
</p>
<p>
if(responseStr.code != 0){
</p>
<p>
alert('上传成功');
</p>
<p>
$('#tables_2').val(responseStr.data);
</p>
<p>
}else{
</p>
<p>
alert('上传失败');
</p>
<p>
}
</p>
<p>
},
</p>
<p>
error: function () {
</p>
<p>
alert("上传错误!");
</p>
<p>
}
</p>
<p>
});
</p>
<p>
}
</p>
<p>
</script>
</p>
<p>
2.后端页面代码
</p>
<p style="white-space: normal">
echo "<pre>";
</p>
<p style="white-space: normal">
print_r($_FILES);
</p>
<p style="white-space: normal">
echo "</pre>";
</p>
<p style="white-space: normal">
打印出以下内容,
</p>
<p style="white-space: normal">
name 文件名称
</p>
<p style="white-space: normal">
type 文件类型<br>
</p>
<p style="white-space: normal">
tmp_name 文件临时地址<br>
</p>
<p style="white-space: normal">
erro 错误编码<br>
</p>
<p style="white-space: normal">
size 文件大小</p>
<p style="white-space: normal"><img src="https://img2018.cnblogs.com/blog/1410496/201910/1410496-20191020003419191-196120755.png"></p>
<p style="white-space: normal"> </p>
<p>
<img src="/file-read-64.png"></p>
<p>
/*得到文件名称并且赋值给$name变量*/
</p>
<p>
$name = $_FILES['fileArray']['name'];
</p>
<p>
/*截取文件后缀并复制给$last*/
</p>
<p>
$last = substr($name,strrpos($name,'.'));
</p>
<p>
/*使用时间戳修改文件名称连接后缀并且复制给$name*/
</p>
<p>
$name = date('YmdHis').rand(10000,99999).$last;
</p>
<p>
/*定义要传文件的位置路径*/
</p>
<p>
$address = ROOT_PATH.'/upload/'.$name;
</p>
<p>
/*使用函数move_uploaded_file 移动临时文件到定义好的地址*/
</p>
<p>
if(move_uploaded_file($_FILES['fileArray']['tmp_name'],$address)){
</p>
<p>
echo 1;
</p>
<p>
}else{
</p>
<p>
echo 0;
</p>
<p>
}
</p>
<p>
<br>
</p>
</div>
<div id="MySignature" role="contentinfo">
一个96年的PHPER<br><br>
来源:https://www.cnblogs.com/zhouxiaohei/p/11706468.html
頁:
[1]