【发布时间】:2021-09-28 22:35:12
【问题描述】:
我正在使用 java 代码和 aws sdk 从我的 aws s3 中的存储桶下载文件 (zip)。 但是,下载的文件已损坏。 手动下载文件。
我比较了文件的内容并注意到损坏的文件包含某种未编码的字符 看到这个:
用于下载的代码如下:
public boolean downloadFile(String bucketName, String fileNameOnServer, String localFileName )
{
S3Object object =null;
InputStream objectData =null;
try
{
object = s3.getObject(new GetObjectRequest(bucketName, fileNameOnServer));
objectData = object.getObjectContent();
}
catch(Exception e)
{
LoggingService.writeToLog("Error001 downloading file "+bucketName+"/"+fileNameOnServer+" to "+localFileName, e, LogModule.CommonUtils,LogLevel.Error);
return false;
}
try
{
FileWriter fw = new FileWriter(localFileName, true);
BufferedWriter bw = new BufferedWriter(fw);
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(object.getObjectContent()));
String line;
while( (line = reader.readLine() ) !=null)
{
bw.write(line);
bw.newLine();
}
LoggingService.writeToLog("file from "+bucketName+"/"+fileNameOnServer+" "+" downloaded to "+bucketName + " successfully", LogModule.CommonUtils,LogLevel.Info);
return true;
}
catch(IOException e)
{
LoggingService.writeToLog("Error downloading file "+bucketName+"/"+fileNameOnServer+" to "+localFileName, e, LogModule.CommonUtils,LogLevel.Error);
return false;
}
finally
{
objectData.close();
bw.close();
object.close();
}
}
catch(IOException e)
{
LoggingService.writeToLog("Error opening local file "+localFileName+" for writing ", e, LogModule.CommonUtils,LogLevel.Error);
return false;
}
}
【问题讨论】:
-
我会调查一下 - 但这里最重要的一件事是您使用的是旧的 V1 API。 Amazon 建议迁移到 S3 V2 API。 github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/…
-
感谢您的注意,我会检查的。然而这很奇怪,因为这段代码是 AWS 网站上建议的代码,我是两个月前复制的。
-
有关最新的 AWS Java V2 代码 - 请参阅此 Github 位置 github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2
-
我现在要处理这个用例,并在此处为这个 Spring BOOT 示例添加下载功能 - github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/…。我们将添加一个下载按钮,以便用户可以下载位于 Amazon S3 存储桶中的给定照片
-
InputStreamReader阅读器用于字符串(可打印字符),而不是二进制数据。您可以将数据读取到字节数组中,而不是 readLine。
标签: amazon-web-services amazon-s3