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;
}
我试图在单击 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;
}