瀏覽器記住使用者上次上傳的檔案
用localStorage保存2進位檔案
情境
一個有點奇葩的需求實現
- 使用者會上傳一個Excel檔案,要在瀏覽器記住這個上傳的檔案(類似一個即時分析的功能)
- 這個東西只會在前端現用而不存到DB
- 而且下次打開時要能自動還原上次的紀錄
作法
-
需要把2進位檔先轉為dataURL (base64),並且存到
localStorage
中。 -
在上傳成功時,調用此方法
function getBase64AndSave(file) {
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
localStorage.setItem("myUploadFileStr", reader.result);
};
reader.onerror = function(error) {
console.log('Error: ', error);
};
}
- 還原檔案
function urltoFile(url, filename, mimeType) {
return (fetch(url)
.then(function(res) {
return res.arrayBuffer();
})
.then(function(buf) {
return new File([buf], filename, {
type: mimeType
});
})
);
}
/** 還原上次查詢的資料 */
function recoveryLastTimeData() {
let uploadFileStr = localStorage.getItem("myUploadFileStr"); // 上次記住的data
if (uploadFileStr) {
urltoFile(uploadFileStr, "lastTime.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
.then(function(file) {
// do something...
});
} else {
// 如果是空的,顯示上傳窗口
}
}
- 清空
/** 清空上次查詢的資料 */
function clearLastTimeData() {
localStorage.removeItem("myUploadFileStr"); // 上次記住的data
// do something...
}
上次修改於 2022-10-15