在Flutter中上传文件到阿里云OSS,可以通过阿里云官方SDK实现。以下是详细步骤:
1. 添加依赖
在 pubspec.yaml 中添加依赖:
dependencies:
aliyun_oss_dart: ^0.2.0 # 检查最新版本
image_picker: ^1.0.4 # 用于选择文件(可选)
permission_handler: ^11.0.1 # 权限处理(可选)
2. 初始化OSS客户端
import 'package:aliyun_oss_dart/aliyun_oss_dart.dart';
final OssClient client = OssClient(
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com', // 替换为你的Endpoint
accessKeyId: 'your_access_key_id',
accessKeySecret: 'your_access_key_secret',
);
3. 文件上传方法
Future<void> uploadFile(String filePath, String objectName) async {
try {
await client.putObject(
PutObjectRequest(
bucketName: 'your_bucket_name',
objectName: objectName,
filePath: filePath,
),
);
print('文件上传成功');
} catch (e) {
print('上传失败: $e');
}
}
4. 完整示例(配合文件选择)
import 'package:image_picker/image_picker.dart';
// 选择并上传文件
Future<void> pickAndUpload() async {
final picker = ImagePicker();
final XFile? file = await picker.pickImage(source: ImageSource.gallery);
if (file != null) {
String objectName = 'uploads/${DateTime.now().millisecondsSinceEpoch}.jpg';
await uploadFile(file.path, objectName);
}
}
5. 安全建议
- 在生产环境中使用STS临时凭证(推荐)
- 通过后端接口获取临时访问凭证
- 不要将AccessKey硬编码在客户端
注意事项:
- 确保Bucket的读写权限正确配置
- 网络请求需要权限,在AndroidManifest.xml和Info.plist中配置网络权限
- 大文件上传建议使用分片上传
通过以上步骤即可实现Flutter到阿里云OSS的文件上传功能。