저번에 이은 다른 기능을 소개하려고 한다.
바로 zip, tar 확장자를 가진 파일을 받아 업로드 시키고,
그것을 리스트로 만들어서 텍스트 파일 형태라면 편집까지 가능한 구조이다.
Frontend
부분을 먼저 보면서 flow대로 설명을 하도록 하겠다.
업로드 파일을 선택하는 <input>
을 만들고 onChange
가 일어나게 되면 uploadFile
을 업데이트 해준다.
업로드 버튼을 눌렀을때 uploadFile
이 비어있다면 에러핸들링을 통해 에러를 일으키고 정상적으로 업로드가 된다면 압축을 푸는 과정을 거친다. 여기서는 백엔드에서 압축을 풀어 파일을 저장시키는 시스템과 프론트엔드에서 압축을 풀어 해당 리스트를 얻어보는 방법을 채택하였다.
31번째 줄부터 시작하는 코드가 해당 코드이며, JSZIP 라이브러리를 이용하여 경로와 dir(해당 파일이 폴더인지 아닌지) 값을 얻을 수 있다. 얻은 값은 FileList
에 저장된다.
fileList
를 얻었다면 해당 내용은 render()
의 부분(106번째 줄) <li>
태그를 만들어서 나타내준다.
해당 태그를 클릭했을때 폴더라면 에러처리를 반환하고, 아니라면 해당 내용을 axios
를 통해 불러와 <textarea>
로 불러와 편집이 가능하게 한다.
해당 파일들은 따로 DB에 저장하지 않고 사용이 된다.
그래서 upload를 처리하는 js만 만들어 구현했다.
multer
를 사용해서 파일 업로드를 해주었다.
해당 경로는 src/files/
에 저장을 해두었고, 파일의 이름 또한 <해당 유저 id>_<원래 이름>
으로 설정하여 저장했다.
API는 총 3개로 나뉜다.
우리가 만들어둔 upload.js
를 require
을 해와서 사용한다. 압축 파일 자체를 저장시켜 준 뒤, 압축을 푸는 amd-zip
을 이용하여 압축도 풀어준다.
해당 api가 잘 작동 되면 front에서는 파일 압축을 풀어 fileList
에 저장하는 과정이랑 연결된다.
절대 경로로 찾아올 파일의 경로를 설정해준뒤 fs
의 속성을 이용하여 가져와서 contents
를 반환하게 된다.
GET과 마찬가지로 fs를 이용하여 변경해주는 간단한 API를 실행해준다.