将href转换为该文件的base64版本

问题描述 投票:-1回答:1

我有一个锚点。

<a id='clicktodownload' href='/getfile?yadayadayada' download='1.3.6.1.2.3.4.111.234'>

我可以成功抓住锚

document.querySelector('clicktodownload')

我可以通过鼠标单击下载它,或者:

document.querySelector('clicktodownload').click()

此锚中的“事物”可以是pdf类型,或压缩文件,或任何其他类型的文件。这是未知的。

是否有可能在下载时获取文件的base64表示而不实际下载并在javascript中将其设置在内存中?

我只需要为它设置一个变量,但不会实际触发下载。

可以使用jQuery,但不幸的是fetch不能。这需要与ie11兼容。

如果需要更多信息,请询问。谢谢。

javascript base64
1个回答
1
投票

如果文件是从同一个域提供的,并且没有跨源请求,那么您可以简单地对href值进行XMLHttpRequest,并请求响应为Blob:

var xhr = new XMLHttpRequest();
xhr.open('get', clicktodownload.href);
xhr.responseType = 'blob';
xhr.onload = processResponse;
xhr.send();

这将返回一个Blob,其type设置为服务器作为responseType发送的任何内容,因此如果获取正确的类型很重要,请确保您的服务器知道它发送的内容。

现在,我建议你直接使用返回的Blob,例如,如果你想用<iframe>显示它,你可以做

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这样的独立文档中),那么你可以使用FileReader

© www.soinside.com 2019 - 2024. All rights reserved.