appendObject method

  1. @override
Future<Response> appendObject(
  1. List<int> fileData,
  2. String fileKey, {
  3. CancelToken? cancelToken,
  4. PutRequestOption? option,
  5. int? position,
})

upload object(file) to oss server fileData is the binary data that will send to oss server position next position that append to, default value is 0.

Implementation

@override
Future<Response<dynamic>> appendObject(
  List<int> fileData,
  String fileKey, {
  CancelToken? cancelToken,
  PutRequestOption? option,
  int? position,
}) async {
  final String bucket = option?.bucketName ?? bucketName;
  final Auth auth = await getAuth();

  final MultipartFile multipartFile = MultipartFile.fromBytes(
    fileData,
    filename: fileKey,
  );

  final Map<String, dynamic> internalHeaders = {
    'content-type': contentType(fileKey),
    'content-length': multipartFile.length,
    'x-oss-object-acl': option.acl,
    'x-oss-storage-class': option.storage,
  };
  final Map<String, dynamic> externalHeaders = option?.headers ?? {};
  final Map<String, dynamic> headers = {
    ...internalHeaders,
    ...externalHeaders
  };

  final String url =
      "https://$bucket.$endpoint/$fileKey?append&position=${position ?? 0}";
  final HttpRequest request = HttpRequest.post(url, headers: headers);
  auth.sign(request, bucket, "$fileKey?append&position=${position ?? 0}");

  return _dio.post(
    request.url,
    data: multipartFile.chunk(),
    cancelToken: cancelToken,
    options: Options(headers: request.headers),
    onSendProgress: option?.onSendProgress,
    onReceiveProgress: option?.onReceiveProgress,
  );
}