相关疑难解决方法(0)

带有数据 URI 和下载属性的锚点在 iOS/Safari 中不起作用

我构建了一个简单的 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 一样工作,点击链接启动下载?

html ios data-uri

8
推荐指数
1
解决办法
1402
查看次数

使用 javascript 创建的锚点下载属性不适用于 iOS Chrome

我在 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 anchor google-chrome download ios

8
推荐指数
0
解决办法
1140
查看次数

如何将javascript对象转换为utf-8 Blob进行下载?

我一直在尝试找到一种可行的解决方案,但找不到。

我在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)

javascript unicode encoding json blob

0
推荐指数
2
解决办法
1825
查看次数

标签 统计

ios ×2

javascript ×2

anchor ×1

blob ×1

data-uri ×1

download ×1

encoding ×1

google-chrome ×1

html ×1

json ×1

unicode ×1