无法使用 Flutter 放大将文件上传到 s3

Posted

技术标签:

【中文标题】无法使用 Flutter 放大将文件上传到 s3【英文标题】:Can't upload files to s3 with Flutter amplify 【发布时间】:2021-06-12 06:09:53 【问题描述】:

每当我尝试将图像上传到我在颤振中创建的 s3 存储桶时,什么都没有发生。

    final pickedFile = await picker.getImage(source: ImageSource.gallery);
    try
    setState(() 
      if (pickedFile != null) 
        _image = File(pickedFile.path);
        
        
       else 
        print('No image selected.');
      
    );
    print("here");
    final key = new DateTime.now().toString();
    print(key);
    Map<String, String> metadata = <String, String>;
metadata['name'] = 'filename';
metadata['desc'] = 'A test file';
S3UploadFileOptions options = S3UploadFileOptions(accessLevel: StorageAccessLevel.private, metadata: metadata);
try 
  UploadFileResult result = await Amplify.Storage.uploadFile(
    key: key,
    local: _image,
    options: options
  );
  print("Uploaded");
 on StorageException catch (e) 
  print(e.message);

catch (e)
      Alert(
          context: context,
          type: AlertType.error,
          desc: "Error Uploading File: " + e.toString());
    

  

我找到了关于主题 https://github.com/aws-amplify/amplify-android/discussions/550 的讨论,但是我没有 amplifyconfiguration.json 文件,我有 .dart 格式的文件。我的所有信息也都存在。我不确定为什么我无法上传到 s3。提前谢谢!

【问题讨论】:

你推送你的放大后端了吗? S3 中是否存在存储桶?对于 amplify-flutter .dart 文件将在那里,这很好。 看看你的 _imag=File(pickedFile.path) - 你实际上并没有打开文件。你刚刚得到了它的参考。在此处查看如何读取文件:api.flutter.dev/flutter/dart-io/File-class.html @Andrija 是的,存储桶存在,我确实推送了后端。我也在使用图像选择器库,获取此图像的方式是传递路径,然后您应该能够上传文件pub.dev/packages/image_picker。 【参考方案1】:
final pickedFile =
    await ImagePicker().getImage(source: ImageSource.gallery);

if (pickedFile != null) 
  var imagePath = pickedFile.path;
  var nameWithExtension = imagePath.split('/')[6];
  var imageName = nameWithExtension.split('.')[0];


use imagePath in local

【讨论】:

以上是关于无法使用 Flutter 放大将文件上传到 s3的主要内容,如果未能解决你的问题,请参考以下文章

通过 Flutter App 的 PreSigned URL 将文件上传到 S3。但是当我下载它时文件已损坏

将flutter web中生成的pdf上传到S3

Blueimp 文件上传 - 直接多次上传到 S3

将多个文件上传到 Terraform 中的多个 S3 存储桶

无法使用 Flutter 将文件上传到 FirebaseStorage

Amazon S3 直接上传无法识别文件的内容类型