S3下载pdf-REST API [英] S3 download pdf - REST API
问题描述
我正在尝试使用Spring Boot Rest API来提供存储在S3上的我的PDF之一.
I am trying to serve one of my PDF stored on S3 using Spring Boot Rest API.
以下是我的代码:
byte[] targetArray = null;
InputStream is = null;
S3Object object = s3Client
.getObject(new GetObjectRequest("S3_BUCKET_NAME", "prefixUrl"));
InputStream objectData = object.getObjectContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(objectData));
char[] charArray = new char[8 * 1024];
StringBuilder builder = new StringBuilder();
int numCharsRead;
while ((numCharsRead = reader.read(charArray, 0, charArray.length)) != -1) {
builder.append(charArray, 0, numCharsRead);
}
reader.close();
objectData.close();
object.close();
targetArray = builder.toString().getBytes();
is = new ByteArrayInputStream(targetArray);
return ResponseEntity.ok().contentLength(targetArray.length).contentType(MediaType.APPLICATION_PDF)
.cacheControl(CacheControl.noCache()).header("Content-Disposition", "attachment; filename=" + "testing.pdf")
.body(new InputStreamResource(is));
当我使用邮递员访问我的API时,我可以下载PDF文件,但问题是它完全空白.可能是什么问题?
When I hit my API using postman, I am able to download PDF file but the problem is it is totally blank. What might be the issue ?
S3传输数据并且不保留缓冲区,并且数据为二进制(PDF),因此如何使用Rest API将这些数据进行服务器处理.
S3 streams the data and does not keep buffer and the data is in binary ( PDF ) so how to server such data to using Rest API.
如何解决这个问题?
推荐答案
下面的简单代码应该对您有用,不知道为什么要尝试将字符转换为字节,反之亦然? 试试这个,它工作正常.都是PostMan/Browser.
Following simple code should work for you, not sure why are you trying to convert characters to bytes and vice-versa? Try this one, it works fine. Both PostMan/Browser.
@GET
@RequestMapping("/document")
@Consumes(MediaType.APPLICATION_OCTET_STREAM)
@Produces("application/pdf")
public ResponseEntity<InputStreamResource> getDocument() throws IOException {
final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
S3Object object = s3.getObject("BUCKET-NAME", "DOCUMENT-URL");
S3ObjectInputStream s3is = object.getObjectContent();
return ResponseEntity.ok()
.contentType(org.springframework.http.MediaType.APPLICATION_PDF)
.cacheControl(CacheControl.noCache())
.header("Content-Disposition", "attachment; filename=" + "testing.pdf")
.body(new InputStreamResource(s3is));
}
这篇关于S3下载pdf-REST API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!