Ajax 之檔案上傳
FormData
簡單的上傳例子
/*
先在 html 裡面準便好 <input class="file-input" tpye="file" /> 標籤
*/
var fileInput = document.querySelector('.file-input');
var formData = new FormData();ar fileInput = document.querySelector('.file-input');
var formData = new FormData();
//新增 formData 上傳檔案
fileInput.onchange = function(e){
formData.append("fileIn", this.value);
}
//上傳檔案
var request = new XMLHttpRequest();
request.open("POST", "/ajax.php");
request.send(formData);/*
先在 html 裡面準便好 <input class="file-input" tpye="file" /> 標籤
*/
var fileInput = document.querySelector('.file-input');
var formData = new FormData();
//新增 formData 上傳檔案
fileInput.onchange = function(e){
formData.append("fileIn", this.value);
}
//上傳檔案
var request = new XMLHttpRequest();
request.open("POST", "/ajax.php");
request.send(formData);
解讀步驟
fileInput
的dom
物件獲取,FormData
物件生成;- 使用
fileInput
的onchange
事件來獲取,檔案的內容; - 使用
formData
的append
方法來新增一個新值到formData
裡面來; - 使用
XMLHttpRequest
的send
的方法來上傳檔案;
原理說明
FormData
物件其實不止是可以用來上傳檔案,如同其名,可以模擬一系列表單控制元件的鍵值對,然後用於 XMLHttpRequest
的提交,其最大的優點就是可以非同步上傳一個二進位制檔案;
FormData
是無法讀取檔案的,其核心就是通過 append()
,將檔案變成新增欄位,來上傳檔案;
FileReader
簡單的讀取檔案例子
/*
先在 html 裡面準便好 <input class="file-input" tpye="file" /> 標籤
*/
var fileInput = document.querySelector('.file-input');
// 建立 FileReader 物件
var fileReader = new FileReader();
fileInput.onchange = function(e){
// 獲取原聲 File 物件
var file = event.target.files[0];
// 以二進位制讀取檔案物件
fileReader.readAsArrayBuffer(file);
//fileReader.readAsDataURL(file); // 以data:URL 格式的字串以表示讀取檔案的內容
//fileReader.readAsText(file); //以字串形式表示讀取到的檔案內容
}
// 讀取操作完成後
fileReader.onload = function (e) {
console.log(e)
}
解讀步驟
- 建立
FileReader
物件; - 通過
fileInput
的dom
物件onchange
的方法, 獲取原始File
物件; - 通過
FileReader
中其中一種讀取方式,讀取原始File
物件; - 通過
FileReader
的onload
方法獲取來繼續讀取完成後的操作;
原理說明
一般來說,讀取檔案應用場景應該是需要作斷點續存的時候,或者想要預覽上傳的圖片;
預覽圖片例子
var fileInput = document.querySelector('.file-input');
var imgSrc = document.querySelector('.img')
// 建立 FileReader 物件
var fileReader = new FileReader();
fileInput.onchange = function(e){
// 獲取原聲 File 物件
var file = event.target.files[0];
fileReader.readAsDataURL(file); // 以data:URL 格式的字串以表示讀取檔案的內容
}
// 讀取操作完成後
fileReader.onload = function (e) {
console.log(e)
imgSrc.src = e.target.result
}
由於本人使用 FileReader
得並不多,所以這裡不作詳細討論了,有興趣的同學可以,直接去看MDN文件
總結
雖然上傳檔案很早就嘗試過了,但是當時理解並不是很深入,而且加上最近幾次在這方面知識的打擊,有點不太能認了;
感謝 白白 的幾次指導,(指導了好幾次,本人還是忘了)
感謝 MDN 提供的文件給予我一定的靈感 - FormData 物件的使用 - FileReader
感謝閱讀,歡迎指出文章的不足之處,以及討論更多的程式碼優化
原文站點 [時之物語](https://z-index.me/
原文連結 Ajax 之檔案上傳
相關文章
- ajax實現檔案上傳
- ajax上傳檔案的請求
- jQuery+ASP.NET的AJAX檔案上傳jQueryASP.NET
- AJAX資料互動及檔案上傳功能
- AjaxFileUpload檔案上傳元件(php+jQuery+ajax)元件PHPjQuery
- SpringMVC之檔案上傳SpringMVC
- 小程式之檔案上傳
- Web安全之檔案上傳Web
- Express檔案上傳之MulterExpress
- 【ajax】 html js jquery ajax上傳檔案【一眼就會】【實用】HTMLJSjQuery
- php檔案上傳之多檔案上傳PHP
- JavaWeb之SpringMVC上傳檔案JavaWebSpringMVC
- jqm檔案上傳,上傳圖片,jqm的表單操作,jqm的ajax的使用,jqm檔案操作大全,檔案操作demo
- 單個檔案上傳和批量檔案上傳
- 支援多檔案上傳,預覽,拖拽,基於bootstrap的上傳外掛fileinput的ajax非同步上傳boot非同步
- Web 安全漏洞之檔案上傳Web
- Java Web之SpringMVC 上傳檔案JavaWebSpringMVC
- php圖片上傳之檔案安全PHP
- 檔案上傳
- SpringMVC 單檔案上傳與多檔案上傳SpringMVC
- jquery ajax file upload NET MVC 無重新整理檔案上傳jQueryMVC
- ajax利用FormData、FileReader實現多檔案上傳php獲取ORMPHP
- PHP檔案上傳進度條完整程式實現 jQuery Ajax apcPHPjQuery
- Java大檔案上傳、分片上傳、多檔案上傳、斷點續傳、上傳檔案minio、分片上傳minio等解決方案Java斷點
- 檔案上傳之三基於flash的檔案上傳
- 漏洞重溫之檔案上傳(總結)
- Koa2 之檔案上傳下載
- jmeter之http請求-如何上傳檔案JMeterHTTP
- 前端大檔案上傳/分片上傳前端
- Flask——檔案上傳Flask
- PHP上傳檔案PHP
- JavaScript 檔案上傳JavaScript
- Git上傳檔案Git
- YII檔案上傳
- 檔案上傳概述
- beego上傳檔案Go
- 上傳檔案流程
- 上傳EXCLE檔案