flutter web如何获取文件长度
在Flutter Web中,如何获取上传文件的大小(字节长度)?尝试了File对象的length方法,但在Web端始终返回0。是否有其他API或方案可以正确获取文件长度?需要兼容Chrome/Firefox等主流浏览器。
2 回复
在Flutter Web中,使用File类的length方法获取文件长度。例如:
File file = File('path/to/file');
int length = await file.length();
注意:Flutter Web中文件操作受浏览器限制,部分功能可能受限。
更多关于flutter web如何获取文件长度的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter Web 中获取文件长度(即文件大小),可以通过以下方法实现:
1. 使用 File 类(适用于用户选择的文件)
如果文件来自用户通过文件选择器上传,可以使用 dart:html 中的 File 类:
import 'dart:html';
void getFileSize(File file) {
int fileSize = file.size; // 文件大小(字节)
print('文件大小: $fileSize bytes');
print('文件大小: ${(fileSize / 1024).toStringAsFixed(2)} KB');
}
完整示例:
import 'dart:html';
void main() {
InputElement uploadInput = FileUploadInputElement();
uploadInput.accept = '*'; // 允许所有文件类型
uploadInput.onChange.listen((e) {
final files = uploadInput.files;
if (files.isNotEmpty) {
File file = files[0];
print('文件名: ${file.name}');
print('文件大小: ${file.size} bytes');
}
});
document.body.children.add(uploadInput);
}
2. 通过网络请求获取远程文件大小
对于远程文件,可以通过 HTTP HEAD 请求获取文件大小:
import 'dart:html';
Future<int> getRemoteFileSize(String url) async {
try {
HttpRequest request = await HttpRequest.request(
url,
method: 'HEAD',
);
String? contentLength = request.getResponseHeader('content-length');
return contentLength != null ? int.parse(contentLength) : -1;
} catch (e) {
print('获取文件大小失败: $e');
return -1;
}
}
// 使用示例
void main() async {
String fileUrl = 'https://example.com/file.pdf';
int size = await getRemoteFileSize(fileUrl);
if (size > 0) {
print('远程文件大小: $size bytes');
}
}
注意事项:
- 文件选择器:Web 环境中需要通过
<input type="file">获取用户文件 - 跨域问题:远程文件需要服务器允许 CORS
- 单位转换:
String formatSize(int bytes) { if (bytes < 1024) return '$bytes B'; if (bytes < 1048576) return '${(bytes / 1024).toStringAsFixed(2)} KB'; return '${(bytes / 1048576).toStringAsFixed(2)} MB'; }
这些方法适用于 Flutter Web 环境,能够准确获取本地和远程文件的长度信息。

