如何解决AmazonClientException:读取的更多数据与预期的长度不同
当我尝试将内容上传到 Amazon S3 存储桶时,我收到 AmazonClientException:读取的数据长度与预期不同。
这是我的代码。
public Object uploadFile(multipartfile file) {
String fileName = System.currentTimeMillis() + "_" + file.getoriginalFilename();
log.info("uploadFile-> starting file upload " + fileName);
Path path = Paths.get(file.getoriginalFilename());
File fileObj = new File(file.getoriginalFilename());
try (FileOutputStream os = new FileOutputStream(fileObj)) {
os.write(file.getBytes());
os.close();
String uploadFilePath = bucketName + "/" + uploadpath;
s3Client.putObject(new PutObjectRequest(uploadFilePath,fileName,fileObj));
Files.delete(path);
} catch (IOException ex) {
log.error("error [" + ex.getMessage() + "] occurred while uploading [" + fileName + "] ");
}
log.info("uploadFile-> file uploaded process completed at: " + LocalDateTime.Now() + " for - " + fileName);
return "File uploaded : " + fileName;
}
解决方法
亚马逊建议使用 Amazon S3 Java V2 API 而不是 V1。
适用于 Java 2.x 的 AWS 开发工具包是对 1.x 版代码库的主要重写。它构建在 Java 8+ 之上,并添加了几个经常请求的功能。其中包括对非阻塞 I/O 的支持以及在运行时插入不同 HTTP 实现的能力。
要将内容上传到 Amazon S3 存储桶,请使用此 V2 代码。
public static String putS3Object(S3Client s3,String bucketName,String objectKey,String objectPath) {
try {
Map<String,String> metadata = new HashMap<>();
metadata.put("myVal","test");
PutObjectRequest putOb = PutObjectRequest.builder()
.bucket(bucketName)
.key(objectKey)
.metadata(metadata)
.build();
PutObjectResponse response = s3.putObject(putOb,RequestBody.fromBytes(getObjectFile(objectPath)));
return response.eTag();
} catch (S3Exception e) {
System.err.println(e.getMessage());
System.exit(1);
}
return "";
}
如果您不熟悉 V2,请参阅此文档主题:
https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
,AWS Java 开发工具包 1.x
s3.putObject(bucketName,key,new File(filePath));
AWS Java SDK 2.X
PutObjectRequest putObjectRequest = PutObjectRequest
.builder()
.bucket(bucketName)
.key(key)
.build();
s3Client.putObject(putObjectRequest,Paths.get(filePath));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。