55

I want to upload a video file to my cloud storage but I want to check the size of the video file before I upload. how to achieve this

1

5 Answers 5

113

If you have the path of the file, you can use dart:io

var file = File('the_path_to_the_video.mp4');

You an either use:

print(file.lengthSync()); 

or

print (await file.length());

Note: The size returned is in bytes.

8
  • 1
    when I tried I got this: hashcode:844733706 Type (FileSystemException) "Cannot retrieve length of file" path:"File: '/storage/emulated/0/WhatsApp/Media/WhatsApp Video/VID-20181028-WA0018.mp4'"
    – Norbert
    Commented Oct 29, 2018 at 12:07
  • 1
    it will return the size in bytes? Commented Mar 31, 2020 at 1:31
  • 1
    Yes, the length is in bytes. Commented Mar 31, 2020 at 3:27
  • 6
    gist.github.com/zzpmaster/ec51afdbbfa5b2bf6ced13374ff891d9 combine it with this. Perfect !
    – Asad S
    Commented Dec 25, 2020 at 15:16
  • 2
    If you are using the latest ImagePicker Which Returns PickedFile instead of File. formatBytes(await File(image.path).lengthSync(), 2) Commented Mar 10, 2021 at 10:39
55

// defined the function

getFileSize(String filepath, int decimals) async {
    var file = File(filepath);
    int bytes = await file.length();
    if (bytes <= 0) return "0 B";
    const suffixes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
    var i = (log(bytes) / log(1024)).floor();
    return ((bytes / pow(1024, i)).toStringAsFixed(decimals)) + ' ' + suffixes[i];  
}

// how to call the function

print(getFileSize('file-path-will-be-here', 1));

// output will be as string like:

97.5 KB

This worked for me. I hope, this will also help you. Thanks a lot for asking question.

9
  • Thank you Kamlesh. This is almost matching with the real size of the file. In the console is saying 2.72 MB and in filesystem is showing 2.9 MB. Commented Mar 5, 2021 at 18:00
  • @FlorentinLupascu I am not sure but this may be different due to 1 MB = 1000 KB instead of 1024 KB.
    – Kamlesh
    Commented Mar 6, 2021 at 8:44
  • This is a really nice function!! +1 Commented Mar 27, 2021 at 14:35
  • @Kamlesh can we use this with a folder?
    – LearnToday
    Commented Sep 10, 2021 at 7:59
  • @LearnToday dear, I did not check it with a folder yet, checked only for file only. Thanks.
    – Kamlesh
    Commented Sep 10, 2021 at 8:43
17

This is work for me.

final file = File('pickedVid.mp4');            
int sizeInBytes = file.lengthSync();
double sizeInMb = sizeInBytes / (1024 * 1024);
if (sizeInMb > 10){
    // This file is Longer the
}
5

If you are using the latest ImagePicker with xFile type then,

 final XFile? photo = await _picker.pickImage(source: ImageSource.camera);
  print(File(photo.path).lengthSync());

will return the file size in bytes.

2
import 'dart:io';

//Here's the method to get file size:

double getFileSize(File file){      
    int sizeInBytes = file.lengthSync();
    double sizeInMb = sizeInBytes / (1024 * 1024);
    return sizeInMb;
}

//Alternatively for extension:

extension FileUtils on File {
    get size {
        int sizeInBytes = this.lengthSync();
        double sizeInMb = sizeInBytes / (1024 * 1024);
        return sizeInMb;
    }
}

Not the answer you're looking for? Browse other questions tagged or ask your own question.