이 할 수있는 방법이 있다는 것을되지 않을 수도 있습니다,하지만 그것은 크롬 전용 파일 시스템 API에 의존한다. 샌드 박스 화 된 파일 시스템에 임시 파일을 만들고 쓰고 작업이 완료되면 일반 파일 시스템에 복사합니다. 이렇게하면 전체 파일을 메모리에 저장할 필요가 없습니다.크롬 API의 비동기 버전은 현재 W3C에서 표준화를 고려하고 있지 않지만 (웹 작업자를 사용하는) 동기 버전이 있습니다. 브라우저 지원이 문제라면,이 대답은 당신을위한 것이 아닙니다.
API는 다음과 같이 작동합니다. 먼저 브라우저에서 requestFileSystem()
함수를 가져옵니다. 우리가 액세스 할 수 있는지 이제
var fileSystem; //This will store the fileSystem for later access
var fileSize = 1024*1024 //Our maximum file system size.
function errorHandler(e) {
console.log('Error: ' + e.name);
}
window.requestFileSystem(window.TEMPORARY, fileSize, function (fs) { fileSystem = fs; }, errorHandler);
:
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
다음, 우리가 요청하는 임시 파일 시스템 (우리는 사용자의 허가를 요청하지 않아도 이런 식으로) : 현재 "웹킷"에 의해 접두사
var fileOptions = {
create: true, //If the file is not found, create it
exclusive: false //Don't throw an error if the file doesn't exist
};
가 여기에 우리가 존재하지 않는 경우 파일을 만들 수 있습니다
getFile()
함수를 호출 파일 시스템은 파일을 만들 수있는 시간입니다. 콜백 내부에서 파일에 쓸 새로운
fileWriter
을 만들 수 있습니다. 그러면
fileWriter
이 파일의 끝으로 이동하고 추가 할 새 텍스트 blob을 만듭니다.
fileSystem.root.getFile(fileName, fileOptions, function(fileEntry) {
fileEntry.createWriter(function(fileWriter) {
fileWriter.seek(fileWriter.length);
var blob = new Blob([STRING_TO_WRITE], {type: 'text/plain'});
fileWriter.write(blob);
}, errorHandler);
});
이 API는 일반 사용자 파일 시스템에 저장하지 않습니다. 대신 특수 샌드 박스 폴더에 저장합니다. 이 파일을 사용자의 파일 시스템에 저장하려면 filesystem:
링크를 만들 수 있습니다. 사용자가 클릭하면 저장하라는 메시지가 표시됩니다. 저장 한 후에는 임시 파일을 제거 할 수 있습니다.
var save = function() {
var download = document.querySelector("a[download]");
if (!fileSystem) { return; }
fileSystem.root.getFile(fileName, {create: false, exclusive: true}, function(fileEntry) {
download.href = fileEntry.toURL();
}, errorHandler);
}
파일의 다운로드를 강제로 다운로드 속성을 가진 링크를 사용 :
이 기능은 fileEntry
의 toURL()
기능을 사용하여 filesystem
링크를 생성합니다. 희망이 당신이 원하는 것을 달성 http://plnkr.co/edit/q6ihXWEXSOtutbEy1b5G?p=preview
: 여기
<a download></a>
이를 보여줍니다 plunker이다. 파일에 계속 추가 할 수는 있지만 메모리에 저장되지는 않지만 사용자가 파일 시스템에 저장할 때까지는 샌드 박스가있는 파일 시스템에 저장됩니다.
새로운 동기식 웹 작업자 API를 사용하려는 경우 자세한 내용은 HTML5rocks article 또는 this one을 참조하십시오.
이 질문에 대한 해결책을 찾지 못하면 데이터를 [Blob] (https://developer.mozilla.org/)에 넣는 대신 사용할 수 있습니다. ko-kr/docs/Web/API/Blob)를 다운로드 한 다음 [createObjectURL()] (https://developer.mozilla.org/de/docs/Web/API/URL.createObjectURL)을 사용하여 다운로드 링크를 생성하십시오 . 브라우저는 디스크에 데이터를 캐시 할 가능성이 크며, 특히 큰 데이터 URL을 갖지는 않습니다. – Phillip
@ 필립 모든 내용을 블롭 또는 zip 파일에 저장하거나 indexDb를 사용하지 않으려면 스트리밍이 필요합니다. – DhruvPathak
번. 현재의 모든 브라우저 기술은 첫 번째 바이트를 보내기 전에 전체 크기를 알아야합니다. node.js와 같은 최신 서버 측 항목 만 http1.1 청킹을 사용할 수 있습니다. 당신은 많은 연결이나 버퍼를 사용해야 할 것입니다. 당신은 웹 소켓을 사용할 수 있지만 양쪽 끝에서 약간의 사용자 정의가 필요할 것입니다. – dandavis