-
xuty authoreda02bb3bf
minio.dart 23.88 KiB
import 'dart:convert';
import 'package:http/http.dart';
import 'package:minio/models.dart';
import 'package:minio/src/minio_errors.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/minio_uploader.dart';
import 'package:minio/src/utils.dart';
import 'package:xml/xml.dart' as xml;
class MinioRequest extends BaseRequest {
MinioRequest(String method, Uri url) : super(method, url);
dynamic body;
@override
ByteStream finalize() {
super.finalize();
if (body is String) {
return ByteStream.fromBytes(utf8.encode(body));
}
if (body is List<int>) {
return ByteStream.fromBytes(body);
}
if (body is Stream<List<int>>) {
return ByteStream(body);
}
throw UnsupportedError('unsupported body type: ${body.runtimeType}');
}
}
class MinioClient {
MinioClient(this.minio) {
anonymous = minio.accessKey.isEmpty && minio.secretKey.isEmpty;
enableSHA256 = !anonymous && !minio.useSSL;
port = minio.port ?? implyPort(minio.useSSL);
}
final Minio minio;
final String userAgent = 'MinIO (Unknown; Unknown) minio-js/0.0.1';
bool enableSHA256;
bool anonymous;
int port;
Future<StreamedResponse> _request({
String method,
String bucket,
String object,
String region,
String resource,
dynamic payload = '',
Map<String, String> queries,
Map<String, String> headers,
}) async {
final url = getRequestUrl(bucket, object, resource, queries);
final request = MinioRequest(method, url);
final date = DateTime.now().toUtc();
final sha256sum = enableSHA256 ? sha256Hex(payload) : 'UNSIGNED-PAYLOAD';
region ??= await minio.getBucketRegion(bucket);
request.body = payload;
request.headers.addAll({
'host': url.host,
'user-agent': userAgent,
'x-amz-date': makeDateLong(date),