无需下载即可获取文件大小

问题描述 投票:0回答:3

如何从 URL 获取文件大小(在 Flutter 中)?我可以通过使用来获取它:

http.Response response = await http.get(url);
print(response.contentLength);

但这会下载整个文件。是否可以在不完全下载的情况下获取文件大小?谢谢

dart flutter
3个回答
15
投票

找到答案:HEAD Request。

http.Response r = await http.head(url);
r.headers["content-length"]

注意:直接

r.contentLength;
是不行的。


2
投票

在下载文件之前,我尝试了上面接受的 firebase storage 文件下载大小的答案。但我看到 http.head 不包含 content-length。所以我尝试了 http.get 方法,我看到 content-length 包含在标头中。所以 我认为这应该是正确的答案。

http.Response r = await http.get(url);
final file_size = r.headers["content-length"];

0
投票

带有后缀的完整函数可能会有用

// import 'package:http/http.dart' as http;
  linkSize(String url) async{
    try{
        String? fileSize = "";
        http.Response response = await http.head(Uri.parse(url));
        fileSize = response.headers["content-length"];
        int bytes = int.parse(fileSize!);
        if (bytes <= 0) {
          fileSize = "0 B";
        }
        const suffixes = ["B", "KB", "MG", "GB", "TB", "PB", "EB", "ZB", "YB"];
        var i = (log(bytes) / log(1024)).floor();
        fileSize =  '${(bytes / pow(1024, i)).toStringAsFixed(0)} ${suffixes[i]}';
    }catch(err){

    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.