我构建了一个简单的 Web 应用程序,它canvas使用canvas.toDataURL(). 然后我使用数据 URI 创建一个锚标记,其中包含一个download属性。像这样的东西:
<a href="data:image/jpeg;base64,somedata" download="filename.jpg">Download</a>
Run Code Online (Sandbox Code Playgroud)
这在 Chrome 和 Safari 上的 Android/MacOS 设备上非常有效 - 单击锚点将数据 URI 下载为.jpg文件。
但在 iOS Chrome 上,点击链接没有任何作用。要下载文件,它需要在新选项卡(显示图像)中打开锚点,然后保存图像。
我试过添加一个,target="_blank"但没有达到预期的结果。
有没有办法让 iOS 像 Android/MacOS 一样工作,点击链接启动下载?
我在 AWS S3 存储桶中保存了一个视频/mp4 文件,当用户单击某个图标时,应从客户端设备(手机或计算机)下载该文件。我首先使用fetch发出请求,然后根据响应创建一个blob对象。接下来,我使用 javascript 创建一个锚元素,我附加了 href 属性并触发它的点击,如下面的代码所示:
fetch(url, {
headers: new Headers({
'Content-Disposition': "attachment; filename='file-name.mp4'",
}),
}).then((response): void => {
if (!response.ok) {
console.log('Error', response);
}
response.blob().then((blob): void => {
let videoUrl = window.URL.createObjectURL(blob);
let a = document.createElement('a');
document.body.appendChild(a);
a.href = videoUrl;
a.download = 'file-name.mp4';
a.target = '_blank';
a.click();
document.body.removeChild(a);
});
});
Run Code Online (Sandbox Code Playgroud)
测试此代码时,它适用于 Android Chrome 和 iOS Safari,但不适用于 iOS Chrome。我可以看到一个请求被触发但没有任何反应,甚至没有打开一个新选项卡。我尝试了其他一些方法,例如使用FileSaver.js库,也尝试了像下面示例中的FileReader,但仍然无法正常工作。
fetch(url, {
headers: new Headers({
'Content-Disposition': "attachment; filename='file-name.mp4'",
}),
}).then((response): …Run Code Online (Sandbox Code Playgroud) 我一直在尝试找到一种可行的解决方案,但找不到。
我在javascript中有一个对象,其中有一些非英语字符。
我正在尝试以下代码将对象转换为Blob以供下载。
当我单击以下载内容时,在打开下载的JSON时,非英语字符变得乱七八糟。
这是一个像这样的简单对象: {name: "??????", last: "?????"}
function setJSONForDownload(obj) {
obj = obj || []; // obj is the array of objects with non-english characters
const length = obj.length;
if (length) {
const str = JSON.stringify(obj);
const data = encode( str );
const blob = new Blob( [ data ], {
type: "application/json;charset=utf-8"
});
const url = URL.createObjectURL( blob );
const downloadElem = document.getElementById('download');
downloadElem.innerText = `Download ${length} pages scraped`;
downloadElem.setAttribute( 'href', url );
downloadElem.setAttribute( 'download', 'data.json' ); …Run Code Online (Sandbox Code Playgroud)