-
randsoy authoredUnverified28a2e2fc
minio_client.dart 8.11 KiB
import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';
import 'package:http/http.dart';
import 'package:minio/minio.dart';
import 'package:minio/src/minio_helpers.dart';
import 'package:minio/src/minio_s3.dart';
import 'package:minio/src/minio_sign.dart';
import 'package:minio/src/utils.dart';
class MinioRequest extends BaseRequest {
MinioRequest(String method, Uri url, {this.onProgress}) : super(method, url);
dynamic body;
final void Function(int)? onProgress;
@override
ByteStream finalize() {
super.finalize();
if (body == null) {
return const ByteStream(Stream.empty());
}
late Stream<Uint8List> stream;
if (body is Stream<Uint8List>) {
stream = body;
} else if (body is String) {
final data = Utf8Encoder().convert(body);
headers['content-length'] = data.length.toString();
stream = Stream<Uint8List>.value(data);
} else if (body is Uint8List) {
stream = Stream<Uint8List>.value(body);
headers['content-length'] = body.length.toString();
} else {
throw UnsupportedError('Unsupported body type: ${body.runtimeType}');
}
if (onProgress == null) {
return ByteStream(stream);
}
var bytesRead = 0;
stream = stream.transform(MaxChunkSize(1 << 16));
return ByteStream(
stream.transform(
StreamTransformer.fromHandlers(
handleData: (data, sink) {
sink.add(data);
bytesRead += data.length;
onProgress!(bytesRead);
},
),
),
);
}
MinioRequest replace({
String? method,
Uri? url,
Map<String, String>? headers,
body,
}) {
final result = MinioRequest(method ?? this.method, url ?? this.url);
result.body = body ?? this.body;