本文为您介绍如何用 Flutter上传 SDK 以简单便捷的方式上传图片。
EnvOptions options = EnvOptions( appID: '512559', appChannel: 'appChannel', appVersion: '1.0.0', appName: "FlutterUploadDemo", userUniqueId: "xxxxxxxx", openAppLog: true, autoStartAppLog: true, debugLogLevel: true, enableLocalLogPrint: true, enableLogCallback: true, useImageXCloudControl: true, deviceID: 'bd_flutter_upload_demo', ); await initEnv(options);
参数获取:请在火山引擎控制台创建应用后获取。
详细的参数说明如下表所示。
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
appID | String | 无 | App ID,必填。从火山引擎控制台 应用管理 获取。 |
appChannel | String? | null | APP 渠道号,必填。该值需要您根据实际业务情况自定义,例如:小米应用商店 (xiaomi)、华为应用市场 (huawei) 等。 |
appVersion | String? | null | App 版本号,必填。该值需要您根据实际业务情况自定义,使用 BuildConfig.VERSION_NAME,合法版本号应包含大于等于 2 个分隔符,例如:"1.3.2" 。 |
appName | String? | null | App 英文名,必填。从火山引擎控制台 应用管理 获取。 |
userUniqueId | String? | null | 设置用户唯一ID,配合AppLog使用。详情参看:2. 设置自定义用户 ID |
deviceID | String? | null | 设备DeviceID,用于云控逻辑针对某设备下发对应配置 |
openAppLog | bool? | true | 是否初始化AppLog |
autoStartAppLog | bool? | true | 开启AppLog(此字段只在Android端生效,推荐在用户同意隐私权限前设置为false,在用户同意隐私权限之后调用 |
debugLogLevel | bool? | false | 设置Debug级别LogLevel,debug阶段建议开启,线上请置为false。 |
enableLocalLogPrint | bool? | false | 是否打印native日志,debug阶段建议开启,线上请置为false。 |
enableLogCallback | bool? | false | 是否开启日志回调,配合 |
useImageXCloudControl | bool? | false | 是否开启ImageX 上传云控功能 |
当 enableLogCallback
设置为 true 的时候,通过设置setLogCallback(void Function(String?, int?) callback)
可进行日志回调。
import 'package:volc_bd_file_upload/core/upload.dart'; // msg: 日志内容。 level: 0 - 6 ,值越大日志级别越高 await setLogCallback((msg, level) { print('log callback------------>: $msg, $level'); });
如果您自己已有一套独立的用户 ID 体系,希望通过用户 ID 来追查单个用户的单次上传行为,则可自定义用户 ID。如需排查问题,请 提交工单 联系技术支持来帮助您完成上传流程的问题定位和追踪。具体操作代码示例如下所示:
// 设置用户 ID private void initSDK(Context context, String userUniqueId) { // 1. 根据上节内容初始化 SDK Env.init(new Config.Builder() // ... 省略 .build()); // 2. 获取 AppLog 实例设置 userUniqueId IAppLogInstance applog = AppLogWrapper.getAppLogInstance(); if (applog != null && !TextUtils.isEmpty(userUniqueId)) { applog.setUserUniqueID(userUniqueId); } } // 移除自定义用户 ID,您的用户注销登录时调用 private void onUserLogout() { IAppLogInstance applog = AppLogWrapper.getAppLogInstance(); if (applog != null) { applog.setUserUniqueID(null); } } // 更新自定义用户 ID,您的用户登录成功/切换登录后调用 private void onUserLogin(String userUniqueId) { IAppLogInstance applog = AppLogWrapper.getAppLogInstance(); if (applog != null) { applog.setUserUniqueID(userUniqueId); } } java
Future<void> initUploaderEnv() async { // 初始化 EnvOptions options = EnvOptions( // ... userUniqueId: "xxxxx", ); await initEnv(options); } Future<void> onUserLogin(String userUniqueId) async { // 当用户登录后调用此API await onUserLogin(userUniqueId); } Future<void> onUserLogout() async { // 当用户退出登陆时调用此API await onUserLogout(); }
实现创建实例的代码示例如下所示:
import 'package:volc_bd_file_upload/bd_file_upload.dart'; ImageXUploaderOptions options = ImageXUploaderOptions options = ImageXUploaderOptions( accessKey: "ak", secretKey: "sk", sessionToken: "token", serviceID: "serviceID", filePaths: filePaths, }; BDImageXUploader uploader = await initImageXUploader(options);
设置要上传的文件,要求List长度大于等于1。
ImageXUploaderOptions options = ImageXUploaderOptions( ... filePaths: ["filePath1", "filePath2", "filePath3"], }
从您的 AppServer 获取鉴权参数设置给 SDK。鉴权参数说明及获取方式详见 客户端上传说明 ,具体操作代码示例如下所示:
注意
如需使用重名文件覆盖上传,请确保您获取的 STS2 上传签名 (此处以 Golang 为例)已开启重名覆盖。
ImageXUploaderOptions options = ImageXUploaderOptions( accessKey: "your accessKey", secretKey: "your secretKey", sessionToken: "your token", ... }
为账号对应的 ServiceID,具体说明以及获取方式您可参考 图片服务管理 。具体操作代码示例如下所示:
ImageXUploaderOptions options = ImageXUploaderOptions( ... serviceID: "your service ID", }
注意
当您不需要再次进行上传操作时,请务必调用 close()
,否则会导致内存泄漏。
具体操作代码示例如下所示:
BDImageXUploader uploader = await initImageXUploader(options); // 开启上传 await uploader.start(); // 暂停上传 await uploader.stop(); // 终止上传 释放上传资源 await uploader.close();
await uploader.setListener( ImageXUploaderInfoCallback( // 上传任务结束后回调 onImageXUploadDidFinish: () async { print( '--- [ImageXUploaderInfoCallback] onImageXUploadDidFinish', ); // 关闭上传对象,释放资源 await uploader.close(); }, // 单张图片上传成功后回调 onSingleImageSuccess: (uploadInfo) { print( '--- [ImageXUploaderInfoCallback] onSingleImageSuccess: ${jsonEncode(uploadInfo)}', ); }, // 单张图片上传失败后回调 onSingleImageFail: (errorCode, errorMsg, uploadInfo) { print( '--- [ImageXUploaderInfoCallback] onSingleImageFail: $errorCode, $errorMsg, ${jsonEncode(uploadInfo)}', ); }, // 单张图片上传进度回调:[0,100] onSingleImageProgress: (progress, uploadInfo) { print( '--- [ImageXUploaderInfoCallback] onSingleImageProgress: $progress, ${jsonEncode(uploadInfo)}', ); }, ), );
回调中 errorCode
为错误码,errorMsg
为错误日志,详情见下表:
参数 | 类型 | 示例值 | 说明 |
---|---|---|---|
errorCode | int | 4006 | 详情请参见上传 SDK 错误码。 |
errorMsg | String | "code":100026, | 错误信息描述(非 json 格式数据)。 |
回调中uploadInfo 类型为 BDImageXUploadInfo
,具体参数见下表:
BDImageXUploadInfo
参数 | 类型 | 示例值 | 说明 |
---|---|---|---|
tosKey | String? |
| 文件存储 Key。命名规范参看 veImageX 存储 Key 通用字符规则。 |
fileIndex | int? |
| 图片序号,对应传入上传图片数组的下标。 |
mMetaInfo | Map<dynamic, dynamic>? |
| 文件信息,包含 FileName、SourceUri、ImageSize、ImageUri 等。 参数详情参见 ImageInfo 字段说明。 |
aesKey | String? |
| 上传进度,取值范围为:[0, 100]。 |