天天看點

移動端圖檔操作(一)——上傳一、accept屬性二、change事件三、File對象四、FileReader五、URL對象六、Blob對象七、formData

友情提示在,在Android手機webview中,是不支援上傳檔案的,網上說是修改Android端的代碼,但我沒試過,我們這邊是使用用戶端提供的接口來實作上傳的。

該屬性表明了伺服器端可接受的檔案類型,可以限制你手機選擇相關的檔案,如果限制多個,可以用逗号分割,下面的代碼就表示隻能選擇圖檔與音頻相關的檔案:

移動端圖檔操作(一)——上傳一、accept屬性二、change事件三、File對象四、FileReader五、URL對象六、Blob對象七、formData

在移動端,點選後會讓你選擇拍照或相冊,還是蠻高大上的。下圖是UC浏覽器中:

移動端圖檔操作(一)——上傳一、accept屬性二、change事件三、File對象四、FileReader五、URL對象六、Blob對象七、formData

一般選擇檔案都會使用“change”事件,下面的代碼就是綁定了change事件,彈出檔案大小:

1) 有些手機浏覽器在點選的時候,會彈出鍵盤選擇,我用onfocus="this.blur()",來強制失去焦點。

2) 當選擇過一次後,再次選擇同一個檔案,“change”事件不會觸發,因為value沒有改變,在網上看到個方法,我還沒有在實際項目中使用,相容性有待考證。

這裡注意下:克隆一個元素節點會拷貝它所有的屬性以及屬性值,但不會拷貝那些使用addEventListener()方法或者node.onclick = fn用JavaScript動态綁定的事件。

File對象負責處理那些以檔案形式存在的二進制資料,也就是操作本地檔案。

1)File對象可以通過3種方式擷取:

1. <input>元素上選擇檔案後傳回的FileList對象中的成員

2)File對象有9個屬性,這裡就隻介紹3個:

Blob可以“append”,ArrayBuffer資料。ArrayBuffer存在的意義就是作為資料源提前寫入在記憶體中,就是提前釘死在某個區域,長度也固定。

下面的代碼是擷取data:URL,可以将傳回的result内容指派給img的src,用于預覽等操作。

移動端圖檔操作(一)——上傳一、accept屬性二、change事件三、File對象四、FileReader五、URL對象六、Blob對象七、formData

URL對象是硬碟上指向檔案的URL。上面的例子中擷取圖檔的引用,通過讀取data URI,data URI是個一大串的字元。

圖檔原本就在硬碟上,還要轉換成另一個格式再用,有點繞了,完全可以直接引用檔案的URL,下面是兩個方法:

console.log(url)内容如下:

移動端圖檔操作(一)——上傳一、accept屬性二、change事件三、File對象四、FileReader五、URL對象六、Blob對象七、formData

在移動端需要做個相容性判斷:

File接口基于Blob,繼承了Blob的功能,并且擴充支援了使用者計算機上的本地檔案。

1)建立Blob對象的4種方法:

1. 調用Blob構造函數

2. 使用一個已有Blob對象上的slice()方法切出另一個Blob對象

3. 調用canvas對象上的toBlob方法

2)利用Blob對象,生成可下載下傳檔案

3)通過slice方法,将二進制資料按照位元組分塊,傳回一個新的Blob對象

利用FormData對象,可以使用鍵值對來模拟一個完整的表單,然後使用XMLHttpRequest發送這個"表單"。

使用FormData的最大優點就是我們可以異步上傳一個二進制檔案。

參考資料:

    本文轉自 咖啡機(K.F.J)   部落格園部落格,原文連結:http://www.cnblogs.com/strick/p/5181701.html,如需轉載請自行聯系原作者

繼續閱讀