【问题标题】:Upload Images as image/jpeg mime/type from Flutter to S3 Bucket将图像作为 image/jpeg mime/type 从 Flutter 上传到 S3 Bucket
【发布时间】:2021-07-22 17:33:02
【问题描述】:

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

在单击 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());
    }
  }
}

【问题讨论】:

  • 我对同一个包有同样的问题 XD 我接受它,因为这是你之前的问题,你在另一个问题中使用 minio
  • 我刚刚发布了如何使用 Minio。

标签: amazon-web-services flutter dart amazon-s3 mime-types


【解决方案1】:

所以我像这样使用Minio

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

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

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

【讨论】:

  • 谢谢。它也适用于我,虽然元数据 'x-amz-acl': 'public-read' 是什么?
  • 它只是使文件公开可读。
  • 那你不使用Minio读取文件(显示图像)吗?在 Flutter 中只是一个直接的 url 和网络图像?
  • 是的,现在我只是在颤振中使用网络图像。稍后我会弄清楚如何保护文件。
  • 您是否设法通过 Minio 获取图像 url?它只是返回 etag。你对此做了什么?谢谢
猜你喜欢
  • 1970-01-01
  • 2018-09-12
  • 2016-05-13
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
相关资源
最近更新 更多