58

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

0

5 Answers 5

123

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.

Sign up to request clarification or add additional context in comments.

8 Comments

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'"
it will return the size in bytes?
Yes, the length is in bytes.
If you are using the latest ImagePicker Which Returns PickedFile instead of File. formatBytes(await File(image.path).lengthSync(), 2)
|
58

// 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.

8 Comments

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.
@FlorentinLupascu I am not sure but this may be different due to 1 MB = 1000 KB instead of 1024 KB.
@Kamlesh can we use this with a folder?
@LearnToday dear, I did not check it with a folder yet, checked only for file only. Thanks.
What is the use of int decimals @Kamlesh
|
18

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
}

Comments

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.

Comments

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;
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.