成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

未來Web應用開發探秘:File API

原創
開發 前端 新聞
File API可以讓開發者在本地文件時獲得更大的自由,而不需要把一些過程傳送到服務器上進行復雜而低效的操作。今天我們就一起來探秘File API的使用。

【51CTO 8月9日外電頭條】我們不止一次的提到File API以及Web應用程序對本地資源的訪問,比如《JavaScript將增加本地操作API 可直接操作本地文件》和《HTML5 File API初探 支持文件拖放上傳功能》等。這不只是一個功能或者API,它還代表了未來Web應用開發的一個趨勢。

回想一下過去那些糟糕的日子:要上傳文件到一個網站需要在一個file input上點擊“瀏覽”按鈕,然后導航到這個文件所在的文件夾,再點擊“打開”,如果要上傳多個文件,需要對每一個文件重復上面的步驟!有了File API,那些日子將一去不復返了。

File API是什么?

File API是一套強大的API,它可以讓開發者處理來自于用戶文件系統的文件,并且可以讓開發者在Web應用程序里使用這些文件,所有這些事情都在本地處理,不需要在服務器上處理。

File API能做什么?

在很多場景下,許多應用程序中,File API都是很有用的。最明顯的用途就是使用Drag和Drop API在drop事件上訪問文件的,來支持拖放式上傳文件(比如image)。當用戶drop文件的時候,你可以把他們轉換成一個data URL,馬上給用戶提供反饋,同時可以用異步的方式把要上傳的image的縮略圖展示給用戶,這可以給用戶提供一個無縫的交互體驗。

幾個例子:

我們收集了一個炫耀File API的例子(http://www.thecssninja.com/demo/crystalball/),這個Demo可以在Firefox3.6和Chrome 6 dev版上正常運行。從你的桌面上拖放任意文件到這個Demo中,看看會發生什么......

◆一個圖片編輯器——http://demos.hacks.mozilla.org/openweb/imageUploader

◆box.net最近添加了對拖放式上傳文件的支持—— box.net

◆font dragr – 測試自定義字體的Web應用程序* – http://fontdragr.com

如何使用File API

使用File API,你有兩種方法可以訪問一個文件并進行操作。第一種方法是通過file input和文件屬性。

  1. document.getElementById("fileinput").files  
  2.  

上面的代碼訪問了FileList對象,它是一個包含多個文件的序列數組。每個文件都有幾個屬性可用,例如name, size和type

訪問一個文件的另一種方法是通過Drag和Drop API,在dataTransfer對象上,也包含一個FileList對象,dataTransfer對象在DnD API的drop事件上可用。

  1. event.dataTransfer.files  
  2.  

這兩種方法都返回同一個序列數組。拖放多個文件可以被處理,并且如果file input有multiple屬性,它也可以處理多個文件。

FileReader

為了用FileList對象來做一些事情,在無需服務器參與的情況下操作文件來顯示給用戶,我們可以使用FileReader對象。它是異步處理的,所以只要不鎖定瀏覽器的UI,它就一直在處理文件。

  1. var reader = new FileReader();  
  2.        
  3.     reader.onload = function (evt) {  
  4.         // do something with the file once it's loaded  
  5.         var data = evt.target.result, // file is stored in the result attribute;  
  6.               img = document.createElement("img");  
  7.        
  8.         img.src = data;  
  9.         document.getElementsByTagName("body").appendChild(img);  
  10.     }  
  11.     reader.readAsDataURL(file); 
 

上面的代碼我們創建了一個新的FileReader對象,然后我們初始化了我們的onload函數,所以只要文件載入了內存,我們就可以操作這個文件了。最后一個函數告訴reader,我們想用這個文件做什么。在我們的實例中,是返回一個DataURL。還有兩個其他的方法可以使用,它們是:

readAsText() 和readAsBinary()

在onload事件的內部,我們創建了一個新的image元素,設置它的source設置成result屬性的值,然后把它附加到document body上。這立刻會把這個image顯示給用戶。

處理大文件——File URL

在前面的例子里,我已經向你展示了如何載入一個文件,然后把它展示給用戶。所有這些方法本質上都是用readAsDataURL/Binary/Text等函數創建一個文件的拷貝,然后把它載入你的可用內存中。當用戶載入了許多文件,或非常大的文件的時候,就會產生問題。比如說,用戶要拖動一個200MB的視頻或者它們拖入了許多的視頻!這將會產生大量的數據,它們都需要載入內存,這會使任何機器突然停止響應,更可能的結果是使瀏覽器崩潰。值得慶幸的是File API的創建者和貢獻者已經想到了這個問題,并且在FileReader對象上添加了一個非常有用的屬性——url。

URL

URL是一個隨機產生的唯一字符串,它映射到你的硬盤上的一個物理文件。這是很有用的,因為這個唯一的字符串可以在html文檔中使用。例如有一個image。把這個image的source設置成File API生成的唯一字符串,不需要把它載入內存,就可以讓你把這個image顯示給用戶。

  1. <img src="moz-filedata:8616e48b-2a2b-418d-9ad4-5669858cf038" /> 
  2.  

上面的例子展示了在Firefox 4中使用的url屬性,image的source應該是什么樣子的。

想象一下這個場景。在你的圖片網站上,你有一個image uploader,用戶在他們的圖片里拖動了一些文件,要drop的那些圖片顯示成了一個漂亮的縮小版本的網格,但是用戶發現了一個問題,認識到那些image中,有一個需要修整一下。他們在一個圖片編輯器中打開這個文件,做了一些修整,回到Web應用程序并點擊上傳按鈕。使用url的好處是改變的文件也可以被上傳,因為它實時的鏈接到文件系統中的物理image,所以無須用戶重新把它們添加到上傳列表中。

到現在為止,Firefox 4是唯一一個支持url屬性的瀏覽器,即便如此,它還存在一個bug:唯一字符串只能顯示通過file input載入的image。無法顯示通過drop事件載入的image。但是,在Firefox 4的穩定版本中,這個bug應該已經被修復了。

看看這個Firefox 4中的Demo(http://www.thecssninja.com/demo/crystalball/fileurl.html),它使用一個file input載入文件,使用了url屬性。

  1. // Code showing url  
  2. var droppedFileURL = file.url;  
  3. ...  
  4. img.src = droppedFileURL; 

上面的代碼很簡單。并不需要附加一個事件來把image載入內存,然后把它轉換成一個data URL,我們只需要簡單的遍歷文件,訪問file對象的url屬性,然后用它設置我們的image的source。對于開發者來說,工作量減輕了,同時用戶計算機的壓力也減輕了。這是一個兩全其美的方法。

向何處前進

在寫這篇文章的時候,只有兩個瀏覽器支持File API:Firefox 3.6和Chrome 6,它們分別在不同程度上支持了File API規范。

File API只是許多正在使用的一線API中的一種。例如,FileWriter和Media Interface(Web攝像頭訪問)在一起使用將爆發出驚人的潛力。這只是未來的開始,離“在桌面的世界里讓Web應用程序成為一等公民”這個目標,我們又近了一步。這條線變得更加模糊了。

【編輯推薦】

  1. 使用HTML5構建下一代的Web Form
  2. Google網頁工具包(GWT)是Web開發的未來?
  3. Google力挺HTML 5 或成未來應用核心
  4. Web領域那些陰魂不散的技術與思想

 原文:The Future of Web Apps: A look at the File API    作者:Ryan Seddon

責任編輯:佚名 來源: 51CTO.com
相關推薦

2011-02-21 09:10:42

WebHTML 5JavaScript

2010-09-03 08:58:01

HTML 5

2019-04-04 09:08:41

2013-05-22 15:43:39

谷歌web組件web開發

2013-04-17 10:06:55

Google GlasMirror API

2013-11-28 09:43:46

JavaScriptWeb

2010-08-27 10:41:41

iPhone核心應用程序

2019-06-26 08:20:19

JavaScriptWeb開發

2022-09-14 09:13:02

ASGIPythonWeb

2023-07-04 07:31:12

JavaScriptWeb

2024-11-22 08:28:43

2010-06-13 09:22:37

jQuery

2009-08-25 15:30:55

DataGrid We

2011-07-19 09:46:38

2011-07-19 09:58:36

2011-09-08 17:48:33

Web Widget

2010-08-18 10:13:55

IntentAndroid

2010-03-15 10:09:24

Indexed DBWeb

2021-01-31 18:52:36

Rust開發Web API

2011-12-16 14:53:34

云計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久热国产精品 | 国产又色又爽又黄又免费 | 国产高清视频在线观看 | 久久久精品网站 | 亚洲欧美一区二区三区1000 | wwwsihu| 精品欧美一区二区在线观看视频 | 91av视频在线观看 | 九九热在线免费观看 | 亚洲视频国产视频 | 国产伊人久久久 | 中文字幕av在线播放 | 日本一卡精品视频免费 | 久久在线看 | 欧美一区二区三区在线播放 | 久久久久国色av免费观看性色 | 91精品无人区卡一卡二卡三 | 欧美在线a | 亚洲成人动漫在线观看 | yeyeav | 久久久精品一区 | 国产粉嫩尤物极品99综合精品 | 9色网站| 国产精品久久一区 | 伊人春色成人 | 国产一级免费视频 | 亚洲一区国产精品 | 日韩精品人成在线播放 | 欧美阿v | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 精品久久久久久亚洲精品 | 精品综合久久久 | 国产一区二区黑人欧美xxxx | 色综合99 | 午夜爽爽爽男女免费观看 | 国产特级毛片 | 亚洲情侣视频 | 91国内精品久久 | 久久久久久久香蕉 | 欧美一区二区视频 | 99热在线观看精品 |