如何从 s3 自动获取 java 中的文件?

How can I automatically get file in java from s3?

@Value("${amazon.sqs.queue.endpoint}")
private String endpoint;
@Value("${amazon.sqs.queue.name}")
private String queueName;
@Autowired
private SQSListener sqsListener;

@Bean
public DefaultMessageListenerContainer jmsListenerContainer() throws JMSException {
    SQSConnectionFactory sqsConnectionFactory = SQSConnectionFactory.builder()
            .withAWSCredentialsProvider(new DefaultAWSCredentialsProviderChain())
            .withEndpoint(endpoint)
            .withAWSCredentialsProvider(new ClasspathPropertiesFileCredentialsProvider("AwsCredentials-sqs.properties"))
            .withNumberOfMessagesToPrefetch(10).build();

    DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
    dmlc.setConnectionFactory(sqsConnectionFactory);
    dmlc.setDestinationName(queueName);
    dmlc.setConcurrentConsumers(1);
    dmlc.setMaxConcurrentConsumers(100);

    dmlc.setMessageListener(sqsListener);

    return dmlc;
}




@Component

public class SQSListener 实现 MessageListener {

private static final Logger LOGGER = LoggerFactory.getLogger(SQSListener.class);

@Override
public void onMessage(Message message) {
    try {
        // Cast the recei

ved message as TextMessage and print the text to screen.
            System.out.println("Received: " + ((TextMessage) message).getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}

我在 s3 中添加了一个文件,然后消息被发送到 sqs 队列。 收到此消息后,我可以获取在 s3 中上传的实际数据吗?

从你的问题中不清楚消息包含什么,但如果消息包含 S3 存储桶和密钥,那么是的,你可以使用 S3 API 下载它。

添加以下依赖

<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>s3</artifactId>
</dependency>

此逻辑将创建 S3 客户端并下载对象。

AwsCredentials credentials = AwsBasicCredentials.create(
    "<AWS Access Key>",
    "<AWS Secret>"
);

S3Client s3client = S3Client.builder()
    .region(Region.US_EAST_1) // or whatever region you're in
    .credentialsProvider(() -> credentials) // credentials created above (or preferably injected)
    .build();

GetObjectRequest getObjectRequest = GetObjectRequest.builder()
    .bucket("the bucket") // the bucket that contains the object, from message maybe?
    .key("the key") // the key to the object, from message maybe?
    .build();

ResponseInputStream<GetObjectResponse> responseInputStream = s3client.getObject(getObjectRequest);

这将为您提供一个可以读取的 InputStream。