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
5 Answers
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 Comments
Norbert
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'"
Vir Rajpurohit
it will return the size in bytes?
Günter Zöchbauer
Yes, the length is in bytes.
Asad S
gist.github.com/zzpmaster/ec51afdbbfa5b2bf6ced13374ff891d9 combine it with this. Perfect !
Mahesh Jamdade
If you are using the latest ImagePicker Which Returns PickedFile instead of File.
formatBytes(await File(image.path).lengthSync(), 2) |
// 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
Florentin Lupascu
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.
Kamlesh
@FlorentinLupascu I am not sure but this may be different due to 1 MB = 1000 KB instead of 1024 KB.
LearnToday
@Kamlesh can we use this with a folder?
Kamlesh
@LearnToday dear, I did not check it with a folder yet, checked only for file only. Thanks.
Muhammad Usman
What is the use of int decimals @Kamlesh
|
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;
}
}