将图像作为 image/jpeg mime/type 从 Flutter 上传到 S3 Bucket

Upload Images as image/jpeg mime/type from Flutter to S3 Bucket

我正在使用我在 Github 上找到的 Flutters aws_s3_upload 插件。我能够将图像上传到我的 AWS s3 存储桶。但是,图像缺少所需的“image/jpeg”mime/type,以便我可以在浏览器中查看它们 window 作为图像。

现在点击 URL 图像下载而不是出现在我的浏览器中。我可以更新此代码,以便将其作为图像上传到我的 S3 存储桶吗?

 library aws_s3_upload;  

 import 'dart:io';    
 import 'package:amazon_cognito_identity_dart_2/sig_v4.dart';
 import 'package:http/http.dart' as http;
 import 'package:path/path.dart' as path;    
 import './src/policy.dart';

class AwsS3 {
  static Future<String> uploadFile(
      {
      String accessKey,    
      String secretKey,
      String bucket,
      String destDir,    
      String region = 'us-east-2',
      File file,

      String filename}) async {
    final endpoint = 'https://$bucket.s3-$region.amazonaws.com';
    final uploadDest = '$destDir/${filename ?? path.basename(file.path)}';

    final stream = http.ByteStream(Stream.castFrom(file.openRead()));
    final length = await file.length();

    final uri = Uri.parse(endpoint);
    final req = http.MultipartRequest("POST", uri);
    final multipartFile = http.MultipartFile('file', stream, length, filename: path.basename(file.path));

    final policy = Policy.fromS3PresignedPost(uploadDest, bucket, accessKey, 15, length, region: region);
    final key = SigV4.calculateSigningKey(secretKey, policy.datetime, region, 's3');
    final signature = SigV4.calculateSignature(key, policy.encode());

    req.files.add(multipartFile);
    req.fields['key'] = policy.key;
    req.fields['acl'] = 'public-read';
    req.fields['X-Amz-Credential'] = policy.credential;
    req.fields['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';
    req.fields['X-Amz-Date'] = policy.datetime;
    req.fields['Policy'] = policy.encode();
    req.fields['X-Amz-Signature'] = signature;

    try {
      final res = await req.send();

      if (res.statusCode == 204) return '$endpoint/$uploadDest';
    } catch (e) {
      print(e.toString());
    }
  }
}

所以我像这样使用 Minio

 await minio.fPutObject('mybucket', objectpath, croppedFile.path,
          {
            'x-amz-acl': 'public-read'
          }
      );

为此,我需要以下依赖项;

import 'package:minio/minio.dart';
import 'package:minio/io.dart';