Spring , 图片路径不包含AWS域

Spring , image path does not include AWS domain

我是 Spring 的新手,我正在尝试从 Amazon S3 提供图像,现在我可以上传图像,但是当我尝试通过端点访问它们时,我在路径中看不到 aws 域,在 Django 中,我曾经在序列化程序中传递请求上下文,但我不知道如何在 Spring.

中执行此操作

响应如下所示:enter image description here

我需要图片路径中的域名

要从 Spring 应用程序访问 Amazon S3 存储桶中的图像,您可以使用 适用于 Java V2 的 AWS SDK。例如,假设您想要读取图像并 return 将其作为字节数组传递给另一个 AWS 服务或在浏览器中下载它。

使用 S3Client 对象的 getObjectAsBytes 方法,您可以使用存储桶名称和密钥作为输入来获取图像。

public byte[] getObjectBytes (String bucketName, String keyName) {

        s3 = getClient();

        try {
            GetObjectRequest objectRequest = GetObjectRequest
                    .builder()
                    .key(keyName)
                    .bucket(bucketName)
                    .build();

            ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(objectRequest);
            byte[] data = objectBytes.asByteArray();
            return data;

        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return null;
    }

另一方面,如果您想获取 Amazon S3 存储桶中某个对象的 URL,您也可以使用 S3Client[=41= 获取此信息] 对象的 s3.utilities().getUrl 方法。

示例:

public static void getURL(S3Client s3, String bucketName, String keyName ) {

        try {

            GetUrlRequest request = GetUrlRequest.builder()
                    .bucket(bucketName)
                    .key(keyName)
                    .build();

            URL url = s3.utilities().getUrl(request);
            System.out.println("The URL for  "+keyName +" is "+url.toString());

        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }

这个 return 的值类似于:

https://bucketxxxxx.s3.amazonaws.com/people.png

要像这样使用 URL 查看对象 - 确保您已将对象设置为由 public 读取 - 否则 URL 不会显示图像。更多信息在这里:

https://aws.amazon.com/premiumsupport/knowledge-center/read-access-objects-s3-bucket/

如果您不知道如何使用适用于 Java V2 的 AWS 开发工具包进行编码,请从这里开始:

Get started with the AWS SDK for Java 2.x