You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac端Tauri应用中Blob下载失败问题求助

解决Mac端Tauri应用跨域下载报错问题

问题原因

Mac端Tauri基于WebKit内核,WebKit对跨域<a>标签的download属性有严格的同源限制,即使浏览器端和Windows Tauri能正常工作,Mac环境下仍会触发安全拦截。

可行解决方案

1. 使用Tauri原生下载API(推荐)

Tauri提供了专门的下载API,绕过WebKit的跨域限制,直接通过原生层面处理下载,更适配桌面应用场景:

import { download } from '@tauri-apps/api/http';

async function handleDownload() {
  try {
    const result = await download(downloadlinkResponse.some.downloadLink, {
      filename: downloadlinkResponse.some.name,
      dir: 'download' // 可选,指定下载到系统下载目录
    });
    console.log('下载完成,文件路径:', result.path);
  } catch (error) {
    console.error('下载失败:', error);
  }
}

// 调用函数
handleDownload();

2. 修复ObjectURL的前端下载逻辑

如果必须用前端方式实现,调整click触发方式并确保Blob处理正确,兼容WebKit:

fetch(downloadlinkResponse.some.downloadLink)
  .then(response => {
    if (!response.ok) throw new Error(`请求失败,状态码: ${response.status}`);
    return response.blob();
  })
  .then(blob => {
    const link = document.createElement('a');
    const objectUrl = URL.createObjectURL(blob);
    
    link.href = objectUrl;
    link.download = downloadlinkResponse.some.name;
    link.style.display = 'none';
    document.body.appendChild(link);

    // 用dispatchEvent替代直接click,适配WebKit
    link.dispatchEvent(new MouseEvent('click', {
      bubbles: true,
      cancelable: true,
      view: window
    }));

    // 延迟释放ObjectURL,确保下载流程完成
    setTimeout(() => {
      URL.revokeObjectURL(objectUrl);
      link.remove();
    }, 1500);
  })
  .catch(error => console.error('下载出错:', error));

3. 检查Tauri安全配置

确保tauri.conf.json中允许目标域名的请求和跨域访问:

{
  "tauri": {
    "allowlist": {
      "http": {
        "request": true,
        "scope": ["https://你的下载域名.com/*"] // 替换为实际下载域名
      }
    },
    "security": {
      "cors": {
        "allowlist": ["https://你的下载域名.com/*"]
      }
    }
  }
}

总结

优先选择Tauri原生下载API,既避免WebKit的安全限制,又能更好地集成桌面应用的文件系统能力;若使用前端方案,需调整触发逻辑并确保Blob处理合规,同时检查Tauri的安全配置是否正确。

内容的提问来源于stack exchange,提问作者hagru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:17:56