Tistory View
이제 Zip파일을 만들어 보도록하자.
새로운 Zip파일을 생성하기 위해 다음과 같이 빈 Instance를 하나 만든다.
var zip = new JSZip();
Zip Instance에 entry를 만들려면 다음과 같이 한다.
zip.file( "file.txt", base64data, {'base64':true});
"file.txt"는 Zip파일내부에서 사용할 파일이름이고 base64data는 이미 base64로 인코딩된 text다. base64를 이용하기 때문에 세번째 파라미터에 base64옵션을 켜주었다.
단순히 스트링데이터를 넣으려면 다음과 같이 할 수 있다.
zip.file( "file.txt", text );
현재 우리는 웹에서 사용을 해야 하기 때문에, 두가지를 고려할 수 있다.
첫번째는 사용자기 지정한 파일을 집어 넣는 것이고, 또 하나는 서버에 있는 데이터를 불러와서 집어넣는 것이다.
사용자가 지정한 파일 넣기
<form>
<input id="file4upload" type="file" name="name" multiple onchange="myOnFileChanged(event);" />
<input type="button" value="download" onclick="myOnDownload( event );"/>
</form>
function download_base64_content( filename, base64Text )
{
//window.location="data:application/octastream;base64, " + base64Text;
var element = document.createElement('a');
element.setAttribute('href', 'data:application/octastream;base64,' + base64Text );
element.setAttribute('download', filename );
element.style.display = 'none';
document.body.appendChild(element); element.click();
document.body.removeChild(element);
}
// 파일을 선택하면 zip 인스턴트에 넣는다.
function myOnFileChanged( evt )
{
var files = document.getElementById('file4upload').files;
for( var i = 0 ; i < files.length ; i++ )
{
var file = files[i];
zip.file( file.name, file );
}
}
// 다운로드 버튼을 눌렀을 때
function myOnDownload( evt ) {
zip.generateAsync({ type: "base64", }).then(
function( base64Text )
{
download_base64_content( 'filename.zip', base64Text );
}
);
}
여러개의 파일을 선택할 수 있도록 <input file .. >에 multiple을 넣어 두었다. 파일선택창에서 여러개의 파일을 선택할 수 있도록 만들었다.
[download]버튼을 누르면 파일을 다운받을 수 있다.
실제 압축은 generateAsync에서 수행이 되기 때문에(쓰레드에서), zip.file(...)함수는 그냥 압축할 목록을 만드는 과정에 불과하다.
필자의 시스템 메모리 16GiB에서 테스트를 한 결과 총 30MiB(메가)정도되는 파일을 올려 테스트를 해보니 브라우저가 4GiB(기가)까지 피크를 쳤으며, 100MiB에서는 브라우저가 처리를 포기했다. 실제 큰 용량을 사용할 수 없는 것이 현재 상황이다. |
서버에서 끌어다가 넣기
jQuery의 Ajax를 사용하여 서버에서 파일을 가져와 담는 과정은 다음과 같다. jQuery를 쓰지 않는 다면.... 만들어 사용..해야 겠지만..
$.get("url/to.file.txt") // jQuery v3 returns promises
.then(function (content) {
zip.file("file.txt", content);
})
압축율 지정하기
zip.file("a.png", contentOfA, {
compression: "STORE" // 이 파일은 압축하지 않음
});
zip.file("b.txt", contentOfA, {
compression: "DEFLATE",
compressionOptions: {
level: 9 // 이 파일은 최대 압축을 한다.
}
});
// 압축률을 지정하지 않으면, generateAsync options에 따라 정해진다.
zip.file("c.txt", contentOfB);
// - a.png는 그냥 압축하지 않고 저장
// - b.txt는 최대 앞축
// - c.txt는 아래의 기본값을 사용
zip.generateAsync({
type: "blob",
compression: "DEFLATE"
});
Zip파일은 파일마다 압축률을 따로 지정이 가능하고, 파일마다 comment도 지정이 가능하다. 위의 예제는 파일마다 따로 압축률을 지정하고 있으며, 지정하지 않는 것은 마지막[generateAsync]에 옵션에서 설정된 것으로 지정된다.
추가적인 옵션을 보려면 다음의 링크에서 확인해 볼 수 있다.
https://stuk.github.io/jszip/documentation/api_jszip/file_data.html
'web > javascript' 카테고리의 다른 글
예제 Zip파일 만들기: Javascript로 Zip파일 다루기 (2) | 2020.02.23 |
---|---|
예제 Zip파일 풀기 : Javascript로 Zip파일 다루기 (2) | 2020.02.22 |
간단한 웹서버 돌리기 : Javascript로 zip파일 다루기 (0) | 2020.02.19 |
인스턴스 만들기 / 파일목록 뽑기 : Javascript로 zip파일 다루기 (0) | 2020.02.19 |
목록 : Javascript로 Zip파일다루기 (0) | 2020.02.19 |
- Total
- Today
- Yesterday
- 예금
- 애드핏
- 재테크
- 공유 컨텍스트
- 안드로이드
- OpenGL ES
- 아끼는 법
- 컴퓨트쉐이더
- 에어컨
- 경제보복
- 컴퓨트셰이더
- 에어콘
- 재태크
- OpenGLes
- Android
- choreographer
- 금리
- texture
- 텍스처
- 전기요금
- gpgpu
- ComputeShader
- 사용료
- 티스토리
- 적금
- 전기료
- 전기세
- TTS
- 블로그
- 애드센스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |