我构建了一个 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 客户端无法下载该文件 - 或者至少我在任何地方都找不到该文件。我在控制台中没有收到任何错误,因此很难在我不知情的情况下判断是否出现任何问题。
我在 v2 上遇到了同样的问题,所以自己修复了
在窗口生成器中添加了
on_download_started
和 on_download_completed
设置器。您至少需要设置一个,但我认为您还需要修改目标路径,例如 {downloads_dir}/{filename}
将文件下载到下载目录