Flutter url_launcher - 如何强制下载 pdf link?

Flutter url_launcher - how to force download pdf link?

我试图在单击 link 时强制下载 pdf 文件。 对于某些 links,它有效。但是其他pdf links,它只是在浏览器中显示pdf。 如果您能提供帮助,我将不胜感激!谢谢

第一种方式

它由 URL 管理。我认为。你可以检查这个link。因为该下载 URL 包含一些 header 基于该浏览器执行的操作。

在浏览器中显示文件:

Content-Type: application/pdf
Content-Disposition: inline; filename="filename.pdf"

在浏览器中下载文件

Content-Type: application/pdf Content-Disposition: attachment;
filename="filename.pdf"

所以基本上您需要在 URL 中管理它。

第二种方式 您也可以直接从 URL

下载文件

网络下载选项

import 'dart:html' as html;
void downloadFile(String url) {
   html.AnchorElement anchorElement =  new html.AnchorElement(href: url);
   anchorElement.download = url;
   anchorElement.click();
}

如果您想从 URL 下载并保存文件而不需要外部库。 移动平台

Future<String> downloadFile(String url, String fileName, String dir) async {
     HttpClient httpClient = new HttpClient();
     File file;
     String filePath = '';
     String myUrl = '';
            
   try {
          myUrl = url+'/'+fileName;
          var request = await httpClient.getUrl(Uri.parse(myUrl));
          var response = await request.close();
         if(response.statusCode == 200) {
                    var bytes = await consolidateHttpClientResponseBytes(response);
                    filePath = '$dir/$fileName';
                    file = File(filePath);
                    await file.writeAsBytes(bytes);
              } else
                    filePath = 'Error code:'+response.statusCode.toString();
            } catch(ex){
                  filePath = 'Can not fetch url';
      }
            
       return filePath;
}