postObject static method

Future<OSSResult> postObject(
  1. Credentials credentials,
  2. OSSConfig config,
  3. String filePath,
  4. String fileName, {
  5. CancelToken? cancelToken,
  6. ProgressCallback? progressCallback,
  7. 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() ?? "");
  }
}