file open, read, save 등 file을 다루기 위한 기본적인 method들을 이해한다.
지금 활용하는 file system method들은 default pattern이 아닌, 사용자가 지정한 class나 객체에 apply하는 개념으로 인터페이스를 수정하면서 적용할 수 있다.
※ file I/O 관련 method들은 입출력이 오래 걸리므로, 웬만하면 async-await 등 비동기 처리에 유의하면서 작성해야 한다.
file을 browser에 load하고, 해당 data를 read 및 get한다.
let fileOpenButton = document.querySelector('body .fileOpen');
let textArea = document.querySelector('pre');
let fileBuffer = null;
//file open
fileOpenButton.addEventListener('click', click);
//save to buffer
async function click(){
//get file data
//buffer의 세부적인 method 사용을 위해 비구조화 방식으로 선언.
[fileBuffer] = await window.showOpenFilePicker();
/*불러오는 파일의 정보 특정 가능
[fileBuffer] = await windiw.showOpenFilePicker({
types: [
{
description : 'specifiy file type'
accept : {
'image/*' : ['.py', '.gif', '.jpeg', '.jpg', '.js', '.html']
}
}
]
})
*/
//console.log(fileBuffer);
//read file data
let fileData = await fileBuffer.getFile();
//console.log(fileData);
//interface file data
let text = await fileData.text();
textArea.innerText = text;
console.log(text);
}
※ 비구조화는 중괄호({}), 대괄호([]) 모두 가능하다.
img file에 대한 open / read / get data logic
//file open
fileOpenButton.addEventListener('click', click);
//save to buffer
async function click(){
//get file data
//buffer의 세부적인 method 사용을 위해 비구조화 방식으로 선언.
[fileBuffer] = await window.showOpenFilePicker();
/*불러오는 파일의 정보 특정 가능
[fileBuffer] = await windiw.showOpenFilePicker({
types: [
{
description : 'specifiy file type'
accept : {
'image/*' : ['.py', '.gif', '.jpeg', '.jpg', '.js', '.html']
}
}
]
})
*/
//console.log(fileBuffer);
//read file data
let fileData = await fileBuffer.getFile();
//console.log(fileData);
if(fileData.type == 'text/html'){
//interface file data
let text = await fileData.text();
textArea.innerText = text;
//console.log(text);
}else if(fileData.type == 'image/png'){
let fileRead = new FileReader();
fileRead.readAsDataURL(fileData);
fileRead.onloadend = () => imageArea.src = fileRead.result;
//console.log(imageArea.src);
}else{
return;
}
}
file 내용을 수정하고, 수정한 내용을 해당 파일에 그대로 save한다.
//file save
let fileSaveButton = document.querySelector('body .fileSave');
fileSaveButton.addEventListener('click', save);
async function save(){
let stream = await fileBuffer.createWritable();
await stream.write(textArea.innerText);
await stream.close();
}
file 내용을 수정하고, 수정한 내용을 다른 이름의 파일로 save as한다.
//file save as
let fileSaveAsButton = document.querySelector('body .fileSaveAs');
fileSaveAsButton.addEventListener('click', saveAs);
async function saveAs(){
fileBuffer = await window.showSaveFilePicker();
let stream = await fileBuffer.createWritable();
await stream.write(textArea.innerText);
await stream.close();
}
CodePurse
https://www.youtube.com/watch?v=8EcBJV0sOSU
비구조화(대괄호방식)
https://stackoverflow.com/questions/46929776/square-brackets-around-variable-name-javascript
showOpenFilePicker()를 통한 image upload
https://stackoverflow.com/questions/64960309/how-to-use-browser-file-system-api-to-create-an-img