Estou tentando criar um endpoint que le o conteudo de um arquivo dentro do meu bucket no S3 mas não estou conseguindo obter o conteudo dele, sabem me dizer se é possivel ?
public String getObjectContent(final ContentObject req){
final var s3object = amazonClient.getObject(bucketName, req.getName());
return s3object.getObjectContent().toString();
}
O @staroski apenas mencionou que é preciso ler o conteúdo do inputStream retornado e exemplificou que vc pode salvar em um arquivo, mas a partir do momento que vc tem o inputStream, vc pode recuperar os dados da forma que precisar. Supondo que seja um texto:
public String getS3ObjectContentAsString(String bucketName, String key) {
try {
if (key.startsWith("/")) {
key = key.substring(1);
}
if (key.endsWith("/")) {
key = key.substring(0, key.length());
}
try (InputStream is = s3Client.getObject(bucketName, key).getObjectContent()) {
return StreamUtils.copyToString(is, StandardCharsets.UTF_8);
}
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
Consegui usando o IOUtils para ler o Stream conforme o @staroski falou
@Override
public String readFile(final FindObjectParameter findObjectParameter) throws IOException {
bucketExist(findObjectParameter.getBucketName());
final var s3Object = client.getObject(findObjectParameter.getBucketName(), findObjectParameter.getFileName());
final var stream = s3Object.getObjectContent();
return IOUtils.toString(stream);
}