【问题标题】:Error while converting image file from AWS S3 Object to Base64将图像文件从 AWS S3 对象转换为 Base64 时出错
【发布时间】:2021-02-04 10:58:27
【问题描述】:

我正在使用以下代码将 S3 对象解析为 Base64 字符串。

InputStream is = s3Object.getObjectContent().getDelegateStream();
byte[] bytes = IOUtils.toByteArray(is);
String base64Data = Base64.getEncoder().encodeToString(bytes); //Java Util lib.

此代码适用于文本和 pdf 文件。但是在转换图像文件时出现错误 MIME type not supported。

我还尝试使用 AWS 和 Apache Commons Base64 库。还是不行。

Base64.encodeAsString(bytes) //AWS
Base64.encodeBase64String(bytes) //Apache Commons

【问题讨论】:

    标签: java spring amazon-web-services spring-boot amazon-s3


    【解决方案1】:

    AWS Java 开发工具包 2

    import software.amazon.awssdk.regions.Region;
    import software.amazon.awssdk.services.s3.S3Client;
    import software.amazon.awssdk.services.s3.model.GetObjectRequest;
    
    import java.io.IOException;
    
    public class S3ReadImg {
        public static void main(String[] args) throws IOException {
    
            S3Client s3 = S3Client.builder()
                    .region(Region.EU_WEST_1) //
                    .build(); // Might change for you
    
            GetObjectRequest getObjectRequest = GetObjectRequest.builder()
                    .bucket("my_bucket_name")
                    .key("four.bmp") // also tested for image types png, jpg, gif
                    .build();
    
            byte[] objectResponse = s3.getObject(getObjectRequest).readAllBytes();
    
            String encodedfile = new String(java.util.Base64.getEncoder().encode(objectResponse), java.nio.charset.StandardCharsets.UTF_8);
    
        }
    }
    
    

    【讨论】:

      【解决方案2】:
      GetObjectRequest request = GetObjectRequest.builder()
                  .bucket("my_bucket_name")
                  .key("four.bmp")
                  .build();
          try {
              byte[] objectResponse = s3Client.getObject(request, ResponseTransformer.toBytes())
                      .asByteArray();
              return Base64.getEncoder().encodeToString(objectResponse);
          } catch (NoSuchKeyException e) {
              log.error(e.getMessage());
              throw e;
          }
      

      【讨论】:

        【解决方案3】:

        发现问题不在代码中。 API 网关配置不正确。

        我参考了这个链接 https://medium.com/swlh/upload-binary-files-to-s3-using-aws-api-gateway-with-aws-lambda-2b4ba8c70b8e

        【讨论】:

          猜你喜欢
          • 2020-07-26
          • 2020-10-01
          • 2017-09-24
          • 2021-08-31
          • 1970-01-01
          • 2015-07-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多