[javascript] data : URI를 사용할 때 제안 된 파일 이름을 지정하는 방법이 있습니까?
예를 들어 링크를 따라 가면
data:application/octet-stream;base64,SGVsbG8=
브라우저는 하이퍼 링크 자체에서 base64로 보관 된 데이터로 구성된 파일을 다운로드하라는 메시지를 표시합니다. 마크 업에서 기본 이름을 제안하는 방법이 있습니까? 그렇지 않은 경우 JavaScript 솔루션이 있습니까?
답변
download
속성을 사용하십시오 .
<a download='FileName' href='your_url'>
에 라이브 예를 html5-demos.appspot.com / … .
현재 Chrome, Firefox, Edge, Opera 및 데스크톱 Safari에서는 작동하지만 iOS Safari 또는 IE11에서는 작동하지 않습니다.
답변
요즘 크롬은 이것을 매우 간단하게 만듭니다.
function saveContent(fileContents, fileName)
{
var link = document.createElement('a');
link.download = fileName;
link.href = 'data:,' + fileContents;
link.click();
}
답변
HTML 만 해당 :download
속성을 사용하십시오 .
<a download="logo.gif" href="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">Download transparent png</a>
자바 스크립트 만 해당 : 이 코드를 사용하여 모든 데이터 URI를 저장할 수 있습니다.
function saveAs(uri, filename) {
var link = document.createElement('a');
if (typeof link.download === 'string') {
link.href = uri;
link.download = filename;
//Firefox requires the link to be in the body
document.body.appendChild(link);
//simulate click
link.click();
//remove the link when done
document.body.removeChild(link);
} else {
window.open(uri);
}
}
var file = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
saveAs(file, 'logo.gif');
Chrome, Firefox 및 Edge 13+ 는 지정된 파일 이름을 사용합니다.
IE11, 에지 (12), 사파리 (9)는 (이 지원하지 않는 download
속성 ) 기본 이름을 사용하여 파일을 다운로드합니다 또는 그들은 단순히 그것을 표시 가 지원되는 파일 유형의 경우, 새 탭에서 : 이미지, 동영상, 오디오 파일을 …
답변
RFC 2397 에 따르면 , 없습니다.
어느 쪽이든 사용할 수 있는 요소의 속성 이없는 것 같습니다 <a>
.
그러나 HTML5는 지원을 작성하는 시점에 보편적이지 않지만 (예를 들어 MSIE 지원이 아님) 요소에 download
속성을 도입했습니다.<a>
답변
netwerk / protocol / data / nsDataHandler.cpp의 파이어 폭스 소스에서 조금 보았습니다.
Data Handler는 내용 / 유형 및 문자 세트 만 구문 분석하고 문자열에 “; base64″가 있는지 확인합니다.
rfc는 파일 이름을 지정하지 않으며 최소한 firefox는 파일 이름을 처리하지 않습니다. 코드는 임의의 이름에 “.part”를 추가합니다.
파이어 폭스 로그도 확인했습니다.
[b2e140]: DOCSHELL 6e5ae00 InternalLoad data:application/octet-stream;base64,SGVsbG8=
[b2e140]: Found extension '' (filename is '', handling attachment: 0)
[b2e140]: HelperAppService::DoContent: mime 'application/octet-stream', extension ''
[b2e140]: Getting mimeinfo from type 'application/octet-stream' ext ''
[b2e140]: Extension lookup on '' found: 0x0
[b2e140]: Ext. lookup for '' found 0x0
[b2e140]: OS gave back 0x43609a0 - found: 0
[b2e140]: Searched extras (by type), rv 0x80004005
[b2e140]: MIME Info Summary: Type 'application/octet-stream', Primary Ext ''
[b2e140]: Type/Ext lookup found 0x43609a0
모질라 소스를보고 싶다면 흥미로운 파일 :
data uri handler: netwerk/protocol/data/nsDataHandler.cpp
where mozilla decides the filename: uriloader/exthandler/nsExternalHelperAppService.cpp
InternalLoad string in the log: docshell/base/nsDocShell.cpp
나는 당신이 해결책을 찾지 않을 수 있다고 생각합니다.
이 스레드에서 알 수 있듯이 html5는 download
속성을 가지고 있으며 firefox 20에서도 작동합니다 .
답변
다음 자바 스크립트 스 니펫은 링크의 새로운 ‘다운로드’속성을 사용하고 클릭을 시뮬레이션하여 Chrome에서 작동합니다.
function downloadWithName(uri, name) {
var link = document.createElement("a");
link.download = name;
link.href = uri;
link.click();
}
그리고 다음 예제는 그 사용법을 보여줍니다.
downloadWithName("data:,Hello%2C%20World!", "helloWorld.txt")
답변
아니.
전체 목적은 파일이 아니라 데이터 스트림이라는 것입니다. 데이터 소스는 파일로 파일을 처리하는 사용자 에이전트에 대한 지식이 없어야합니다.