File 对象继æ¿èª Blobï¼å¹¶æ©å±äºä¸æä»¶ç³»ç»ç¸å
³çåè½ã
æä¸¤ç§æ¹å¼å¯ä»¥è·åå®ã
第ä¸ç§ï¼ä¸ Blob ç±»ä¼¼ï¼æä¸ä¸ªæé å¨ï¼
new File(fileParts, fileName, [options])
filePartsââ Blob/BufferSource/String ç±»åå¼çæ°ç»ãfileNameââ æä»¶åå符串ãoptionsââ å¯é对象ï¼lastModifiedââ æå䏿¬¡ä¿®æ¹çæ¶é´æ³ï¼æ´æ°æ¥æï¼ã
第äºç§ï¼æ´å¸¸è§çæ¯ï¼æä»¬ä» <input type="file"> æææ¾æå
¶ä»æµè§å¨æ¥å£æ¥è·åæä»¶ãå¨è¿ç§æ
åµä¸ï¼file å°ä»æä½ç³»ç»ï¼OSï¼è·å¾ this ä¿¡æ¯ã
ç±äº File æ¯ç»§æ¿èª Blob çï¼æä»¥ File 对象å
·æç¸åç屿§ï¼éå ï¼
nameââ æä»¶åï¼lastModifiedââ æå䏿¬¡ä¿®æ¹çæ¶é´æ³ã
è¿å°±æ¯æä»¬ä» <input type="file"> ä¸è·å File å¯¹è±¡çæ¹å¼ï¼
<input type="file" onchange="showFile(this)">
<script>
function showFile(input) {
let file = input.files[0];
alert(`File name: ${file.name}`); // ä¾å¦ my.png
alert(`Last modified: ${file.lastModified}`); // ä¾å¦ 1552830408824
}
</script>
è¾å
¥ï¼inputï¼å¯ä»¥éæ©å¤ä¸ªæä»¶ï¼å æ¤ input.files æ¯ä¸ä¸ªç±»æ°ç»å¯¹è±¡ãè¿éæä»¬åªæä¸ä¸ªæä»¶ï¼æä»¥æä»¬åªå input.files[0]ã
FileReader
FileReader æ¯ä¸ä¸ªå¯¹è±¡ï¼å
¶å¯ä¸ç®çæ¯ä» Blobï¼å æ¤ä¹ä» Fileï¼å¯¹è±¡ä¸è¯»åæ°æ®ã
å®ä½¿ç¨äºä»¶æ¥ä¼ éæ°æ®ï¼å 为ä»ç£çè¯»åæ°æ®å¯è½æ¯è¾è´¹æ¶é´ã
æé 彿°ï¼
let reader = new FileReader(); // 没æåæ°
ä¸»è¦æ¹æ³:
readAsArrayBuffer(blob)ââ å°æ°æ®è¯»å为äºè¿å¶æ ¼å¼çArrayBufferãreadAsText(blob, [encoding])ââ å°æ°æ®è¯»å为ç»å®ç¼ç ï¼é»è®¤ä¸ºutf-8ç¼ç ï¼çææ¬å符串ãreadAsDataURL(blob)ââ 读åäºè¿å¶æ°æ®ï¼å¹¶å°å ¶ç¼ç 为 base64 ç data urlãabort()ââ åæ¶æä½ã
read* æ¹æ³çéæ©ï¼åå³äºæä»¬å欢åªç§æ ¼å¼ï¼ä»¥åå¦ä½ä½¿ç¨æ°æ®ã
readAsArrayBufferââ ç¨äºäºè¿å¶æä»¶ï¼æ§è¡ä½çº§å«çäºè¿å¶æä½ã对äºè¯¸å¦åçï¼slicingï¼ä¹ç±»çé«çº§å«çæä½ï¼Fileæ¯ç»§æ¿èªBlobçï¼æä»¥æä»¬å¯ä»¥ç´æ¥è°ç¨å®ä»¬ï¼èæ é读åãreadAsTextââ ç¨äºææ¬æä»¶ï¼å½æä»¬æ³è¦è·åå符串æ¶ãreadAsDataURLââ 彿们æ³å¨srcä¸ä½¿ç¨æ¤æ°æ®ï¼å¹¶å°å ¶ç¨äºimgæå ¶ä»æ ç¾æ¶ãæ£å¦æä»¬å¨ Blob ä¸ç« ä¸æè®²çï¼è¿æä¸ç§ç¨äºæ¤ç读åæä»¶çæ¿ä»£æ¹æ¡ï¼URL.createObjectURL(file)ã
读åè¿ç¨ä¸ï¼æä»¥ä¸äºä»¶ï¼
loadstartââ å¼å§å è½½ãprogressââ å¨è¯»åè¿ç¨ä¸åºç°ãloadââ 读åå®æï¼æ²¡æ errorãabortââ è°ç¨äºabort()ãerrorââ åºç° errorãloadendââ 读åå®æï¼æ 论æåè¿æ¯å¤±è´¥ã
读å宿åï¼æä»¬å¯ä»¥éè¿ä»¥ä¸æ¹å¼è®¿é®è¯»åç»æï¼
reader.resultæ¯ç»æï¼å¦ææåï¼reader.erroræ¯ errorï¼å¦æå¤±è´¥ï¼ã
ä½¿ç¨æå¹¿æ³çäºä»¶æ çæ¯ load å errorã
è¿æ¯ä¸ä¸ªè¯»åæä»¶ç示ä¾ï¼
<input type="file" onchange="readFile(this)">
<script>
function readFile(input) {
let file = input.files[0];
let reader = new FileReader();
reader.readAsText(file);
reader.onload = function() {
console.log(reader.result);
};
reader.onerror = function() {
console.log(reader.error);
};
}
</script>
FileReader ç¨äº blobæ£å¦æä»¬å¨ Blob ä¸ç« 䏿æå°çï¼FileReader ä¸ä»
å¯è¯»åæä»¶ï¼è¿å¯è¯»åä»»ä½ blobã
æä»¬å¯ä»¥ä½¿ç¨å®å° blob 转æ¢ä¸ºå ¶ä»æ ¼å¼ï¼
readAsArrayBuffer(blob)ââ 转æ¢ä¸ºArrayBufferï¼readAsText(blob, [encoding])ââ 转æ¢ä¸ºå符串ï¼TextDecoderçä¸ä¸ªæ¿ä»£æ¹æ¡ï¼ï¼readAsDataURL(blob)ââ 转æ¢ä¸º base64 ç data urlã
FileReaderSyncå¯¹äº Web Workerï¼è¿æä¸ç§åæ¥ç FileReader åä½ï¼ç§°ä¸º FileReaderSyncã
å®çè¯»åæ¹æ³ read* ä¸ä¼çæäºä»¶ï¼ä½æ¯ä¼å常è§å½æ°é£æ ·è¿åä¸ä¸ªç»æã
ä¸è¿ï¼è¿ä» å¨ Web Worker ä¸å¯ç¨ï¼å 为å¨è¯»åæä»¶çæ¶åï¼åæ¥è°ç¨ä¼æå»¶è¿ï¼èå¨ Web Worker ä¸ï¼è¿ç§å»¶è¿å¹¶ä¸æ¯å¾éè¦ãå®ä¸ä¼å½±å页é¢ã
æ»ç»
File 对象继æ¿èª Blobã
é¤äº Blob æ¹æ³å屿§å¤ï¼File å¯¹è±¡è¿æ name å lastModified 屿§ï¼ä»¥åä»æä»¶ç³»ç»è¯»åçå
é¨åè½ãæä»¬é常ä»ç¨æ·è¾å
¥å¦ <input> æææ¾äºä»¶æ¥è·å File 对象ã
FileReader 对象å¯ä»¥ä»æä»¶æ blob ä¸è¯»åæ°æ®ï¼å¯ä»¥è¯»å为以ä¸ä¸ç§æ ¼å¼ï¼
- å符串ï¼
readAsTextï¼ã ArrayBufferï¼readAsArrayBufferï¼ã- data urlï¼base-64 ç¼ç ï¼
readAsDataURLï¼ã
使¯ï¼å¨å¾å¤æ
åµä¸ï¼æä»¬ä¸å¿
读åæä»¶å
容ãå°±åæä»¬å¤ç blob 䏿 ·ï¼æä»¬å¯ä»¥ä½¿ç¨ URL.createObjectURL(file) å建ä¸ä¸ªçç urlï¼å¹¶å°å
¶èµç» <a> æ <img>ãè¿æ ·ï¼æä»¶ä¾¿å¯ä»¥ä¸è½½æä»¶æè
å°å
¶åç°ä¸ºå¾åï¼ä½ä¸º canvas ççä¸é¨åã
èä¸ï¼å¦ææä»¬è¦éè¿ç½ç»åéä¸ä¸ª Fileï¼é£ä¹å¾å®¹æï¼å XMLHttpRequest æ fetch çç½ç» API æ¬èº«å°±æ¥å File 对象ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼