Flutter Web 从 url 下载文件而不是打开它

有没有办法直接在用户的设备上下载像 .pdf 这样的文件,而不是在浏览器中打开这个 pdf?此代码适用于下载非浏览器支持的文件,但它会在浏览器中打开 pdf、mp3 等。

final anchor = AnchorElement(
    href: pickedFile)
  ..setAttribute("download", fileName)
    ..click();
stack overflow Flutter Web download file from url instead of opening it
原文答案

答案:

作者头像

如果有人仍在寻找解决方案。

如果锚标签具有下载属性,则将直接下载文件。

注意:仅支持相同原始请求的下载属性

因此,而不是将外部URL链接分配给锚点元素。从PDF数据创建blob对象,并从中创建对象URL。

 var url = Url.createObjectUrlFromBlob(Blob([data]));
      AnchorElement(href: url)
        ..setAttribute('download', '<downloaded_file_name.pdf>')
        ..click();

我正在使用firebase存储文件,所以这是完整的代码。

FirebaseStorage.instance.ref(resumeFileName).getData().then(
    (data) {
      var url = Url.createObjectUrlFromBlob(Blob([data]));
      AnchorElement(href: url)
        ..setAttribute('download', '<downloaded_file_name.pdf>')
        ..click();
    }
  );
作者头像

使用 Dio 库。

dependencies:
  dio: ^3.0.10

下载文件

response = await dio.download("https://www.google.com/", "./xx.html");

这个 video 会帮助你。