如何通过 Mac 上的 Tauri 应用程序从 URL 下载内容?

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

我构建了一个 Tauri 应用程序,其功能类似于文档中心。我将文件上传到 blob 容器,并且可以在文档中看到它们。从这里,我希望能够再次下载它们,这在浏览器以及我的 Windows 计算机上的 Tauri 桌面应用程序中都运行得很好。然而问题似乎出在我的 Mac 客户端中。

这是我最初在 TypeScript 中的代码:

export async function downloadFile(fileId, parentId) {
    var downloadlinkResponse = await getDownloadLink(fileId, parentId);
    if (downloadlinkResponse.none) {
        alert(downloadlinkResponse.none.public_message ?? "File could not be downloaded");
        return;
    }

    var link = document.createElement("a");
    link.setAttribute("download", "");
    link.href = downloadlinkResponse.some.downloadLink;
    document.body.appendChild(link);
    link.click();
    link.remove();
}

这工作得很好,但是,在我的 Mac 上,我收到此错误:“锚点上的下载属性被忽略,因为它的 href URL 具有不同的安全源

getDownloadLink 正确返回 SasURI。

为了尝试解决这个问题,我实现了一个略有不同的函数:

function downloadBlob(url, filename) {
    fetch(url, {
      headers: new Headers({
        'Origin': location.origin
      }),
      mode: 'cors'
    })
    .then(response => response.blob())
    .then(blob => {
      let blobUrl = window.URL.createObjectURL(blob);
      let link = document.createElement('a');
      link.setAttribute('download', filename);
      link.href = blobUrl;
      document.body.appendChild(link);
      link.click();
      link.remove();
      window.URL.revokeObjectURL(blobUrl);
    })
    .catch(error => {
      console.error(error);
    });
  }

并将第一段代码的最后 6 行替换为:

downloadBlob(downloadlinkResponse.some.downloadLink, downloadlinkResponse.some.name);

这在浏览器和我的 Windows 桌面应用程序中仍然运行良好,但是,我的 Mac 客户端无法下载该文件 - 或者至少我在任何地方都找不到该文件。我在控制台中没有收到任何错误,因此很难在我不知情的情况下判断是否出现任何问题。

macos download blob tauri
1个回答
0
投票

我在 v2 上遇到了同样的问题,所以自己修复了
在窗口生成器中添加了

on_download_started
on_download_completed
设置器。您至少需要设置一个,但我认为您还需要修改目标路径,例如
{downloads_dir}/{filename}
将文件下载到下载目录
这里:https://github.com/tauri-apps/tauri/pull/8159

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