postObjectWithBytes method

Future<OSSResponse> postObjectWithBytes(
  1. Uint8List fileData,
  2. String bucketName,
  3. String fileKey, {
  4. ObjectACL acl = ObjectACL.inherited,
})

Implementation

Future<OSSResponse> postObjectWithBytes(
  Uint8List fileData,
  String bucketName,
  String fileKey, {
  ObjectACL acl = ObjectACL.inherited,
}) async {
  final OSSCredential credential = await credentialProvider.getCredential();

  FormData formData = FormData.fromMap({
    //文件名,随意
    'Filename': fileKey,
    //"可以填写文件夹名(对应于oss服务中的文件夹)/" + fileName
    'key': fileKey, //上传后的文件名
    'policy': SignUtil.getBase64Policy(),
    //Bucket 拥有者的AccessKeyId。
    //  accessKeyId 大小写 和服务端返回的对应就成,不要在意这些细节  下同
    'OSSAccessKeyId': credential.accessKeyId,
    //让服务端返回200,不然,默认会返回204
    'success_action_status': '200',
    'signature': SignUtil.getSignature(credential.accessKeySecret!),
    //临时用户授权时必须,需要携带后台返回的security-token
    'x-oss-security-token': credential.securityToken,
    // 指定OSS创建Object时的访问权限
    'x-oss-object-acl': acl.parameter,
    'file': MultipartFile.fromBytes(fileData),
  });

  final dio = DioUtil.getDio()!;
  final res = await dio.post(
    'https://$bucketName.$endpoint',
    options: Options(
      responseType: ResponseType.plain,
    ),
    data: formData,
  );

  return OSSResponse(res.statusCode, res.statusMessage, fileKey);
}