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資料互動及檔案上傳功能
- SpringMVC之檔案上傳SpringMVC
- 【ajax】 html js jquery ajax上傳檔案【一眼就會】【實用】HTMLJSjQuery
- Web安全之檔案上傳Web
- 小程式之檔案上傳
- jquery ajax file upload NET MVC 無重新整理檔案上傳jQueryMVC
- 單個檔案上傳和批量檔案上傳
- Web 安全漏洞之檔案上傳Web
- 檔案上傳
- Java大檔案上傳、分片上傳、多檔案上傳、斷點續傳、上傳檔案minio、分片上傳minio等解決方案Java斷點
- 漏洞重溫之檔案上傳(總結)
- Koa2 之檔案上傳下載
- 檔案上傳之三基於flash的檔案上傳
- 前端大檔案上傳/分片上傳前端
- minio上傳檔案
- 檔案上傳漏洞
- JavaScript 檔案上傳JavaScript
- SpringBoot上傳檔案Spring Boot
- Flask——檔案上傳Flask
- Linux上傳檔案Linux
- Git上傳檔案Git
- PHP上傳檔案PHP
- 檔案上傳概述
- ajaxfileupload 檔案上傳
- Android大檔案上傳秒傳之MD5篇Android
- .NET Core 如何上傳檔案及處理大檔案上傳
- Linux伺服器上傳檔案傳送檔案Linux伺服器
- ajax上傳檔案,spring mvc獲取檔案並處理,通過頁面按鈕傳送url,由後臺控制檔案下載SpringMVC
- 檔案上傳之解析漏洞編輯器安全
- 檔案上傳下載
- Linux——拖拽上傳檔案Linux
- WEB漏洞——檔案上傳Web
- HTTP檔案上傳原理HTTP
- 上傳檔案的陷阱
- laravel 多檔案上傳Laravel
- ServletFileUpload類上傳檔案Servlet
- Java Web 檔案上傳JavaWeb