file을 read하는 별도의 class와 method 등을 활용한다.
<input class="loader" type="file" accept="*" />
<div class="divisionpreviewImage">
<img src="" class="previewImage" alt="Check Image here">
</div>
// file read(upload) logic
let reader = new FileReader();
let preview = document.querySelector('img.previewImage');
let fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', whenfileReaderSelected);
function handleEvent(e){
console.log('img.src');
preview.src = reader.result;
};
function whenfileReaderSelected(e){
let selectedFile = fileInput.files[0];
if(selectedFile){
console.log(fileInput.files)
reader.addEventListener('load', handleEvent);
}
console.log('image.src is ', preview.src);
console.log('fileInput.files[0] is ', selectedFile);
reader.readAsDataURL(selectedFile);
console.log('readAsDataURL');
};
}
local storage를 활용하여 간단한 문자열을 저장할 수 있다.
localStorage.setItem('0', preview.src)
text editor에 담겨진 내용을 file로 만들어 PC에 저장하는 logic을 구성한다.
text editor에 작성한 내용을 PC에 file로 생성하여 저장한다.
let saveButton = document.querySelector('.saveButton');
let textArea = document.querySelector('.textArea');
Blob
, anchor element를 통한 download logic을 활용한다.saveButton.addEventListener('click', ()=>{
downloadFunction(textArea.value, 'file.txt', 'text/plain');
})
function downloadFunction(content, fileName, fileType){
const a = document.createElement('a');
const textFile = new Blob([content], {type: fileType});
a.href = URL.createObjectURL(textFile);
a.download = fileName;
a.click();
URL.revokeObjectURL(a.href);
}
file create/save as가 아닌 임시저장(editor save)은 어떻게 구현할 수 있을지 고민해본다.
text editor의 내용변화을 감지하고 unsaved 문구를 표시한다.
element declation
let messageBox = document.querySelector('.messageBox');
let indicator = document.createTextNode('UNSAVED');
addEventListener and file create/save as
textArea.addEventListener('input', (e)=>{indicateChangedText(e)});
function indicateChangedText(e){
messageBox.appendChild(indicator);
}
saveButton.addEventListener('click', ()=>{
downloadFunction(textArea.value, 'file.txt', 'text/plain');
messageBox.removeChild(indicator);
})
▶ vanillaJS를 통한 file create/save as logic 구현하기
function downloadFunction(content, fileName, fileType){
const a = document.createElement('a');
const textFile = new Blob([content], {type: fileType});
a.href = URL.createObjectURL(textFile);
a.download = fileName;
a.click();
URL.revokeObjectURL(a.href);
}
file upload logic(sugar syntax)
https://developer.mozilla.org/ko/docs/Web/API/Blob/Blob
file upload logic(fundamental)
https://robkendal.co.uk/blog/2020-04-17-saving-text-to-client-side-file-using-vanilla-js
about Blob
https://developer.mozilla.org/ko/docs/Web/API/Blob/Blob
활용해야하는 메소드
create element
https://developer.mozilla.org/ko/docs/Web/API/Document/createElement
create text node
https://developer.mozilla.org/ko/docs/Web/API/Document/createTextNode
create object URL
https://developer.mozilla.org/ko/docs/Web/API/URL/createObjectURL
remove object URL
https://developer.mozilla.org/ko/docs/Web/API/URL/revokeObjectURL
addEventListener event types
https://developer.mozilla.org/ko/docs/Web/Events