PHP使用HTML5 FileApi實(shí)現(xiàn)Ajax上傳文件功能示例
本文實(shí)例講述了PHP使用HTML5 FileApi實(shí)現(xiàn)Ajax上傳文件功能。分享給大家供大家參考,具體如下:
FileApi是HTML5的一個(gè)新特性,有了這個(gè)新特性,js就可以讀取本地的文件了,然后實(shí)現(xiàn)真正的Ajax上傳文件了,而不是iframe方法,下面會(huì)介紹api的使用,以及實(shí)現(xiàn)Ajax上傳文件:
FileApi使用
定義上傳控件:
<input type="file" name="pic" onchange="selfile();" />
當(dāng)上傳文件后,就會(huì)觸發(fā)selfile()函數(shù),selfile()代碼:
var files = document.getElementsByTagName('input')[0].files;//fileList對(duì)象,文件列表對(duì)象,表示有多個(gè)文件被上傳,如果只有1個(gè)文件上傳也是fileList對(duì)象
var files = document.getElementsByTagName('input')[0].files[0];//file對(duì)象,表示單個(gè)上傳文件
Ajax上傳文件
效果圖:

項(xiàng)目結(jié)構(gòu)圖:

11-fileApi.html文件:
頁(yè)面中主要有一個(gè)上傳文件按鈕,如果有文件上傳,onchange事件被響應(yīng),selfile函數(shù)調(diào)用,然后js讀取上傳文件、把文件名和大小顯示在頁(yè)面中、創(chuàng)建FormData對(duì)象并添加數(shù)據(jù)、ajax上傳文件、預(yù)覽上傳文件效果。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>fileApi實(shí)現(xiàn)Ajax上傳文件</title>
<link rel="stylesheet" href="">
<script>
function selfile(){
var file = document.getElementsByTagName('input')[0].files[0];//js讀取上傳文件
var con = '';
con += '文件名:' + file.name + '<br/>';
con += '大?。? + file.size;
document.getElementById('debug').innerHTML = con;//把文件名和大小顯示在頁(yè)面中
var fd = new FormData();//創(chuàng)建FormData對(duì)象
fd.append('pic',file);//添加文件數(shù)據(jù)
//ajax上傳文件
var xhr = new XMLHttpRequest();
xhr.open('POST','11-fileApi.php',true);
xhr.send(fd);
var img = document.createElement('img');//動(dòng)態(tài)創(chuàng)建img標(biāo)簽
img.src = window.URL.createObjectURL(file);//把二進(jìn)制對(duì)象直接讀出瀏覽器顯示的資源
document.getElementsByTagName('body')[0].appendChild(img);//把img標(biāo)簽動(dòng)態(tài)添加到dom樹中
}
</script>
</head>
<body>
<input type="file" name="pic" onchange="selfile();" />
<div id="debug"></div>
</body>
</html>
11-fileApi.php文件:
首先判斷是否有文件上傳,然后判斷上傳是否成功,最后把文件復(fù)制到當(dāng)前目錄下的upload目錄下,文件名保持不變。
<?php
/**
* fileApi實(shí)現(xiàn)Ajax上傳文件
* @author webbc
*/
if(empty($_FILES)){
exit('no file');
}
if($_FILES['pic']['error'] !== 0){
exit('fail');
}
move_uploaded_file($_FILES['pic']['tmp_name'],'./upload/'.$_FILES['pic']['name']);
?>
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php文件操作總結(jié)》、《PHP目錄操作技巧匯總》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》及《PHP網(wǎng)絡(luò)編程技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php 下 html5 XHR2 + FormData + File API 上傳文件操作實(shí)例分析
- php+html5實(shí)現(xiàn)無(wú)刷新圖片上傳教程
- 使用PHP和HTML5 FormData實(shí)現(xiàn)無(wú)刷新文件上傳教程
- php+html5+ajax實(shí)現(xiàn)上傳圖片的方法
- php+html5使用FormData對(duì)象提交表單及上傳圖片的方法
- php 使用html5實(shí)現(xiàn)多文件上傳實(shí)例
- PHP 文件上傳進(jìn)度條的兩種實(shí)現(xiàn)方法的代碼
- php實(shí)現(xiàn)簡(jiǎn)單的上傳進(jìn)度條
- php上傳文件并顯示上傳進(jìn)度的方法
- PHP+Ajax無(wú)刷新帶進(jìn)度條圖片上傳示例
- PHP+Ajax實(shí)現(xiàn)上傳文件進(jìn)度條動(dòng)態(tài)顯示進(jìn)度功能
- php 使用html5 XHR2實(shí)現(xiàn)上傳文件與進(jìn)度顯示功能示例
相關(guān)文章
PHP實(shí)現(xiàn)支持GET,POST,Multipart/form-data的HTTP請(qǐng)求類
這篇文章主要介紹了PHP實(shí)現(xiàn)支持GET,POST,Multipart/form-data的HTTP請(qǐng)求類,包括了連接與處理方式及相關(guān)的技巧,需要的朋友可以參考下2014-09-09
一個(gè)基于PDO的數(shù)據(jù)庫(kù)操作類
工作一年以來(lái),所做的項(xiàng)目使用的都是ADODB,但其的代碼臃腫和執(zhí)行效率低導(dǎo)致現(xiàn)在需要更換。2011-03-03
php 靜態(tài)頁(yè)面中顯示動(dòng)態(tài)內(nèi)容
靜態(tài)頁(yè)面中顯示動(dòng)態(tài)內(nèi)容,一些網(wǎng)站的qq在線狀態(tài),還有購(gòu)物車用的是這個(gè)方法2009-08-08
php魔術(shù)方法與魔術(shù)變量、內(nèi)置方法與內(nèi)置變量的深入分析
本篇文章是對(duì)php魔術(shù)方法與魔術(shù)變量、內(nèi)置方法與內(nèi)置變量進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP計(jì)算2點(diǎn)經(jīng)緯度之間的距離代碼
以下是對(duì)PHP計(jì)算2點(diǎn)經(jīng)緯度之間的距離代碼進(jìn)行了分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08
PHP實(shí)現(xiàn)一維數(shù)組與二維數(shù)組去重功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)一維數(shù)組與二維數(shù)組去重功能,結(jié)合實(shí)例形式分析了php針對(duì)一維數(shù)組與二維數(shù)組進(jìn)行遍歷、判斷、排序、去重等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
php實(shí)現(xiàn)不通過(guò)擴(kuò)展名準(zhǔn)確判斷文件類型的方法【finfo_file方法與二進(jìn)制流】
這篇文章主要介紹了php實(shí)現(xiàn)不通過(guò)擴(kuò)展名準(zhǔn)確判斷文件類型的方法,涉及php中finfo_file方法與二進(jìn)制流針對(duì)文件類型的相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
PHP gbk環(huán)境下json_dencode傳送來(lái)的漢字
在做一個(gè)小項(xiàng)目的時(shí)候用得gbk,發(fā)現(xiàn)json_encode傳過(guò)來(lái)的漢子不對(duì)。搜索出結(jié)果。。留下印子不忘記。。歡迎指正2012-11-11

