真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

無刷新上傳文件以及HTML5下的實(shí)現(xiàn)方式

版權(quán)聲明: 本文由 一只博客 發(fā)表于?bloghome博客

創(chuàng)新互聯(lián)建站"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營銷需求!創(chuàng)新互聯(lián)建站具備承接各種類型的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)項(xiàng)目的能力。經(jīng)過十多年的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評。

文章鏈接:?https://www.bloghome.com.cn/user/cnn237111

常規(guī)實(shí)現(xiàn)方法:

ajax無法實(shí)現(xiàn)上傳文件,因此常規(guī)情況下,要實(shí)現(xiàn)無刷新上傳文件的做法,是在頁面隱藏一個(gè)iframe,然后將上傳form的target指向這個(gè)iframe,變相的實(shí)現(xiàn)。如下代碼:

Uploading...

????File:?
??????????


upload_target是一個(gè)長寬都是0的iframe,所以頁面上看不見他。還需要配合js,使得效果更好:

其中startUpload方法是在提交表單的時(shí)候觸發(fā),而由于沒有什么回調(diào)函數(shù),因此finisheUpload只能由upload.php文件的輸出控制。通常就是在輸出中輸出一段javascript代碼來執(zhí)行。

php代碼如下:

window.parent.finisheUpload(0);?";
}
else
{
???echo?"window.parent.finisheUpload(1);?";
}

注意,輸出javascript的時(shí)候,由于調(diào)用的js方法是在iframe外定義的,要在iframe內(nèi)調(diào)用js方法,需要指定window.parent。

————————

HTML5下的實(shí)現(xiàn)方法:

先介紹一下FileReader對象:

FileReader對象的詳細(xì)說明可以在W3C官方文檔中查看。

該接口提供方法來讀取文件對象或者Blob對象。它繼承了EventTarget,接口的描述如下:

[Constructor]
????interface?FileReader:?EventTarget?{
??????//?async?read?methods
??????void?readAsArrayBuffer(Blob?blob);
??????void?readAsText(Blob?blob,?optional?DOMString?label);
??????void?readAsDataURL(Blob?blob);
??????void?abort();
??????//?states
??????const?unsigned?short?EMPTY?=?0;
??????const?unsigned?short?LOADING?=?1;
??????const?unsigned?short?DONE?=?2;
??????readonly?attribute?unsigned?short?readyState;
??????//?File?or?Blob?data
??????readonly?attribute?(DOMString?or?ArrayBuffer)??result;
??????readonly?attribute?DOMError??error;
??????//?event?handler?attributes
??????attribute?EventHandler???????attribute?EventHandler?onprogress;
??????attribute?EventHandler???????attribute?EventHandler?onabort;
??????attribute?EventHandler?onerror;
??????attribute?EventHandler?????};

可以看到有4個(gè)異步方法,其中3個(gè)是讀取,1個(gè)是放棄,4個(gè)狀態(tài)屬性,1個(gè)result,1個(gè)error和6個(gè)事件。(之前還有readAsBinaryString方法,不過已經(jīng)被W3C去除了)這6個(gè)事件的觸發(fā)時(shí)機(jī)如下:

loadstart --When the read starts.

progress --While reading (and decoding) blob

abort --When the read has been aborted. For instance, by invoking the abort() method.

error --When the read has failed (see errors).

load --When the read has successfully completed.

loadend --When the request has completed (either in success or failure).

下面演示一個(gè)例子,讀取一個(gè)文本文檔,并且alert出來內(nèi)容。



——————————————————————————————

下面演示一個(gè)例子,讀取一個(gè)DataURL的,DataURL其實(shí)是一種DataURI(要知道URI的更多細(xì)節(jié),可以去http://css-tricks.com/data-uris/,或者維基百科了解更多)。它提供了一種在瀏覽器中顯示數(shù)據(jù)的途徑。比如你要顯示一個(gè)圖片(百度的logo)的話,你可以如下寫:

你也可以用它的URI去寫,如下:

src中填寫的字符串就是DataURI,格式如下:

data:[][;charset=][;base64],

這種URI其實(shí)很有用的,可以減少HTTP請求,使得網(wǎng)站提速。因此獲取了URI的話就可以加載本地的圖像了。示例代碼如下:



————————————————————————————————————

還有一個(gè)方法是readAsArrayBuffer,從字面就可以看出,是把文件讀取到一個(gè)數(shù)組緩沖區(qū)。

使用readAsArrayBuffer這種方法實(shí)現(xiàn)上傳文件

下面演示一個(gè)例子:


后端PHP代碼:

try{
????$filename=$_GET['filename'];
????$input?=?file_get_contents("php://input");??//這個(gè)是獲取請求的InputStream,PHP下的寫法
????file_put_contents($filename,?$input);//保存成文件。
????echo?json_encode(array("msg"=>"上傳成功"));
}
catch(Exception?$e)
{
????echo?json_encode(array("msg"=>"上傳失敗"));
}

FormData方法

FromData的官方說明在這里。利用FormData對象,你可以使用一系列的鍵值對來模擬一個(gè)完整的表單。

以下給出一個(gè)例子,允許上傳多個(gè)文件:


后臺(tái)PHP代碼:

try
{
????foreach($_FILES?as?$key?=>?$value)
????{
????????//print_r?($_FILES[$key]);?echo?"
"; ????????move_uploaded_file(?$value["tmp_name"],?$value['name']); ????} ????????echo?json_encode(array("msg"=>"上傳成功")); } catch(Exception?$e) { ????echo?json_encode(array("msg"=>"上傳失敗")); }



參考文檔:

https://developer.mozilla.org/zh-CN/docs/DOM/XMLHttpRequest/FormData/Using_FormData_Objects

http://dev.w3.org/2006/webapi/FileAPI/#FileReader-interface

http://www.w3.org/TR/XMLHttpRequest2/#interface-formdata

http://blog.teamtreehouse.com/reading-files-using-the-html5-filereader-api

http://www.dotblogs.com.tw/junegoat/archive/2013/05/27/test-fileapi-multiupload-readasarraybuffer.aspx


分享文章:無刷新上傳文件以及HTML5下的實(shí)現(xiàn)方式
URL鏈接:http://weahome.cn/article/ppicid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部