putObject method

Future<OSSObjectPut> putObject(
  1. OSSObjectPut object, {
  2. String? bucket,
  3. String? endpoint,
  4. String? path,
  5. ProgressCallback? onSendProgress,
})
  • bucket endpoint 一次性生效
  • path 上传路径 如不写则自动以 Objecttype time 生成path

Implementation

Future<OSSObjectPut> putObject(OSSObjectPut object,{
  String? bucket,
  String? endpoint,
  String? path,
  ProgressCallback? onSendProgress
}) async {
  await verify();

  final String objectPath = object.key;

  final Map<String, dynamic> safeHeaders = _signer!.sign(
    httpMethod: 'PUT',
    resourcePath: '/${bucket ?? this.bucket}/$objectPath',
    headers: {
      'content-type': object.mediaType.mimeType,
    },
  ).toHeaders();
  try {
    final String url =
        'https://${bucket ?? this.bucket}.${endpoint ?? this.endpoint}/$objectPath';
    final Uint8List bytes = object.bytes;
    // if (object is OSSImageObject && !object.fullImage) {
    //   bytes = MediaAssetUtils.compressImage(file);
    // }
    await _http.put<void>(
      url,
      data: Stream.fromIterable(bytes.map((e) => [e])),
      options: Options(
        headers: <String, dynamic>{
          ...safeHeaders,
          ...<String, dynamic>{
            'content-length': object.bytes.length,
          }
        },
        contentType: object.mediaType.mimeType,
      ),
        onSendProgress:onSendProgress
    );
    object.url = url;
    object.exist = true;
    return object;
  } catch (e) {
    rethrow;
  }
}