Javascript 将href转换为文件的base64版本
我有一个锚点Javascript 将href转换为文件的base64版本,javascript,base64,Javascript,Base64,我有一个锚点 <a id='clicktodownload' href='/getfile?yadayadayada' download='1.3.6.1.2.3.4.111.234'> 我可以用鼠标点击下载,或者: document.querySelector('clicktodownload').click() 这个锚中的“东西”可以是pdf类型、压缩文件或任何其他类型的文件。这是未知的 下载时是否可以获取文件的base64表示形式,而无需实际下载它并在javascript内
<a id='clicktodownload' href='/getfile?yadayadayada' download='1.3.6.1.2.3.4.111.234'>
我可以用鼠标点击下载,或者:
document.querySelector('clicktodownload').click()
这个锚中的“东西”可以是pdf类型、压缩文件或任何其他类型的文件。这是未知的
下载时是否可以获取文件的base64表示形式,而无需实际下载它并在javascript内存中设置它
我所需要的只是给它设置一个变量,但实际上不触发下载
可以使用jQuery,但遗憾的是fetch无法使用。这需要与ie11兼容
如果需要更多的信息,请询问。谢谢。如果文件来自同一域,并且没有跨源请求,那么您只需对
href
值进行XMLHttpRequest,并请求响应为Blob:
var xhr = new XMLHttpRequest();
xhr.open('get', clicktodownload.href);
xhr.responseType = 'blob';
xhr.onload = processResponse;
xhr.send();
这将返回一个Blob,其类型设置为服务器作为responseType发送的任何内容,因此如果获得正确的类型很重要,请确保服务器知道它发送的内容
现在,我建议您直接处理返回的Blob,例如,如果您想以
的形式显示它,您可以这样做
function processResponse(evt) {
var blob = evt.target.result;
var url = URL.createObjectURL(blob);
iframe.src = url;
// don't forget to call URL.revokeObjecURL(iframe.src) when not needed anymore
}
但是,如果您确实需要b64版本(例如,将其包含在svg等独立文档中),那么您可以使用。也希望添加,jquery的使用是可以的,但是fetch()并不不幸,因为这需要在IES中工作。请编辑您的问题,而不是在其下方添加注释。一个答案是使用XmlHttpRequest(又名AJAX)。在某些浏览器中,对文件输入强制执行.click()
。但实际上,您应该限制文件类型。你在拿文件你甚至不知道它们是什么?你想用它们做什么?如果您的意思是希望使用JavaScript查看文件,而不将其加载到服务器上,那么可以使用文件读取器API。签出。更新问题@DaveS@PHPglue我不想解释为什么我想实现上述目标的原因,只想讨论这是否可能。我正在寻找的是一种只获取文件二进制数据的方法,而不必将文件下载到内存中。我使用的方法与您发布的方法完全相同,但将数据作为数组缓冲区返回,我很好奇是否可以将其与base64一致。谢谢你的作品!console.logging我得到的blob:blob(2402581){size:2402581,type:“application/x-7z-compressed”}size:2402581 type:“application/x-7z-compressed”proto:blob
function processResponse(evt) {
var blob = evt.target.result;
var url = URL.createObjectURL(blob);
iframe.src = url;
// don't forget to call URL.revokeObjecURL(iframe.src) when not needed anymore
}