gpt4 book ai didi

dart - Flutter Dio 包下载路径

转载 作者:行者123 更新时间:2023-12-03 04:04:29 25 4
gpt4 key购买 nike

我的主要目标是从链接下载文件,然后将其保存到手机的内部存储中,以便可以通过手机的文件管理器访问它。我目前正在试用Dio通过运行示例 code 进行打包在包的 repo 中给出。运行程序后,我遇到了路径问题。当我使用 ./example/flutter.png作为下载路径,I/flutter (10109): FileSystemException: Cannot open file, path = './example/flutter.png' (OS Error: No such file or directory, errno = 2)出现。当我使用 (await getApplicationDocumentsDirectory()).path产生 String值为:/data/user/0/com.example.downloadexample/app_flutter作为路径,没有出现错误,但文件不存在。我尝试了后一种路径的不同变体,但没有成功。有人可以帮我解决这个问题吗?

提前谢谢了。

最佳答案

我用的是http包,不是Dio,代码:

Future<String> fetchNetFileToDoc(String url, String filename) async {
final path = await getApplicationDocumentsDirectory();
File docFile = File('$path/$filename');
if(await docFile.exists()){
print( '${docFile.path} exits');
return docFile.path;
}

http.Response response = await http.get(url);
// todo - check status
await docFile.writeAsBytes(response.bodyBytes, flush: true);
return docFile.path;
}

如果我调用此方法,例如: fetchNetFileToDoc('http://a.com/a.mp3', 'a.mp3')它显示相同的错误:
FileSystemException: Cannot open file, path= 'Direcotry: '/data/user/0/com.example.master_lu/app_flutter'/a.mp3' (OS Error: No such file or directory, errno = 2)

但如果我使用 getTemporaryDirectory(),请将代码更改为:
Future<String> fetchNetFileToTemp(String url, String filename) async {
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
File tempFile = File('$tempPath/$filename');
if(await tempFile.exists()){
print( '${tempFile.path} exits');
return tempFile.path;
}

http.Response response = await http.get(url);
// todo - check status
await tempFile.writeAsBytes(response.bodyBytes, flush: true);
return tempFile.path;
}

没关系,它适用于内部存储。将文件保存到 data/user/0/com.example.master_lu/cache/a.mp3master_lu 是我的项目的名称。

最新的=> 我解决了我的问题, await getApplicationDocumentsDirectory返回 Future<Directory>
所以,这是正确的代码:
Future<String> fetchNetFileToDoc(String url, String filename) async {
final docDir = await getApplicationDocumentsDirectory();
String docPath = docDir.path;
File docFile = File('$docPath/$filename');
if(await docFile.exists()){
print( '${docFile.path} exits');
return docFile.path;
}

http.Response response = await http.get(url);
// todo - check status
await docFile.writeAsBytes(response.bodyBytes, flush: true);
return docFile.path;
}

关于dart - Flutter Dio 包下载路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51196421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com