java - 如何使用资源尝试将 S3Object 转换为 File 并在 Java 中返回 File Object?
问题描述
我有一个service
方法,它File Object
从给定的AWS S3存储桶返回一个fileName
. 我想将 S3Object 转换为 File 对象并返回相同的值。
我不想使用任何临时位置来下载文件,只想将其转换S3Object
为File
Object 并返回它。
我也想try
与资源一起使用IOUtils
。
我的问题是执行com.amazonaws.util.IOUtils.copy(InputStream in, OutputStream out)
获取文件对象的方法的正确方法是什么。调用方法将使用此 File 对象进行进一步处理,因此我不想将其保存在本地。我尝试了类似的方法,但它抛出了 FileNotFoundException。
我确定我在这方面遗漏了一些东西,可能是IOUtils.copy必须以不同的方式使用。或者我没有正确使用资源。
public File getFileFromBucket(String fileName) {
GetObjectRequest getObjectRequest = new GetObjectRequest(aWSBucketName, fileName);
S3Object s3Object = aWSS3client.getObject(getObjectRequest);
File s3File = new File(fileName);
try (FileOutputStream fos = new FileOutputStream(s3File)) { //throws Exception
IOUtils.copy(s3Object.getObjectContent(), fos);
} catch (IOException e) {
log.debug("IOException Occurred while fetching file {}", fileName);
e.printStacktrace();
}
return s3File;
}
返回文件的正确方法是什么?任何帮助表示赞赏,在此先感谢。
编辑
如果我不想在本地保存文件对象,是否建议将InputStream返回给调用方法?
如前所述,调用方法使用apache poi
库来解析 excel 文件。
org.apache.poi.xssf.usermodel.XSSFWorkbook.XSSFWorkbook(InputStream is)
这种方法无论如何都需要InputStream
作为参数。
我不知道为什么我想把它转换成一个文件。
问题:
是否建议将S3Object.getObjectContent()
as an发送InputStream
到调用方法,或者有更好的方法吗?
解决方案
在咨询了我的前辈之后,我发现发送InputStream
到调用方法是可以的。
如果InputStream
需要保存到本地系统,则IOUtils.copy
可以在需要时使用。
转换InputStream
到File
然后再转换回InputStream
是浪费计算。
因此我的方法只是返回ObjectContent
这样的:
public InputStream getFileInputStreamFromBucket(String fileName) {
GetObjectRequest getObjectRequest = new GetObjectRequest(aWSBucketName, fileName);
S3Object s3Object = aWSS3client.getObject(getObjectRequest);
InputStream fileInputStream = s3Object.getObjectContent();
log.debug("File Input Stream fetched from s3 bucket for File {} ", fileName);
return fileInputStream;
}
这似乎是正确的选择。
如果有人有更好的发回方式,InputStream
请随时发布答案。
推荐阅读
- docker - 如何在 kubernetes 中添加 pod 依赖项,就像 docker-compose.yml 中的“depends_on”一样
- youtube - YouTube 还在使用 DASH 吗?
- ios - Scenekit:为什么我的相机看不到远处的物体?
- python - 如何从python中提取HTML文件中的特定行?
- r - 无法启动 rstudio(安装在 Anaconda 中)
- python - 在python中将日期时间写入CSV文件?
- reactjs - 添加导入对象时的括号表示法
- php - 从 API 获取 json 数据,如何以表格格式或引导程序在循环中显示数据
- amazon-web-services - 潜望镜式应用架构
- java - 日食氧气 (4.7) 中无法通过 JMC 6 启动飞行记录器