postObject static method
Future<OSSResult>
postObject(
- Credentials credentials,
- OSSConfig config,
- String filePath,
- String fileName, {
- CancelToken? cancelToken,
- ProgressCallback? progressCallback,
- Map? callbackParam,
credentials
服务端返回的 oss 签名信息
config
oss 的配置信息
file
上传的文件
fileName
保存到 oss 上的全路径的文件名 (test/user/head.png)
callbackParam
上传到 oss 的回调
上传的图片可以用 http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/info 查询图片信息
Implementation
static Future<OSSResult> postObject(Credentials credentials, OSSConfig config, String filePath, String fileName, {CancelToken? cancelToken, ProgressCallback? progressCallback, Map? callbackParam}) async {
String policyText = '{"expiration": "${credentials.expiration}","conditions": [{"bucket": "${config.bucket}" },["content-length-range", 0, 1048576000]]}';
// 获取签名
String signature = _getSignature(credentials, policyText);
BaseOptions options = new BaseOptions();
options.responseType = ResponseType.plain;
if (callbackParam != null) {
options.headers = {"x-oss-callback": _getBase64Str(json.encoder.convert(callbackParam))};
}
//创建dio对象
Dio dio = new Dio(options);
// 请求参数的form对象
var map = {
'key': fileName,
'policy': _getBase64Str(policyText),
'OSSAccessKeyId': credentials.accessKeyId,
'success_action_status': '200', //让服务端返回200,不然,默认会返回204
'signature': signature,
'contentType': 'multipart/form-data',
'file': MultipartFile.fromFileSync(filePath),
"x-oss-security-token":credentials.securityToken,
};
FormData data = new FormData.fromMap(map);
try {
// var url ="${config.url}?callback=${_getBase64Str(json.encoder.convert(callbackParam))}";
// 发送请求
var response = await dio.post(config.host, data: data, cancelToken: cancelToken, onSendProgress: progressCallback);
return OSSResult(200, host: config.host, fileName: fileName);
} catch (e) {
Response? response = (e as DioError).response;
return OSSResult(response?.statusCode ?? -1, message: response?.toString() ?? "");
}
}