我是 AWS 的新手,现在我正在尝试编写一个独立的 Java 应用程序来将 PDF 上传到 AWS S3。但是,返回错误:400。
任何人都可以给我一些有关如何解决此错误的一般指导吗?
public class App {
private static String PDF_PATH = "/tmp/pdf-test.pdf";
public static void main(String[] args) throws IOException {
// prepare AWS credential
BasicAWSCredentials awsCreds = new BasicAWSCredentials("xxx",
"yyy");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion("aaa")
.withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();
// upload a test PDF
byte[] pdfDoc = Files.readAllBytes((new File(PDF_PATH)).toPath());
PutObjectRequest request = new PutObjectRequest("aaa", "bbb",
new String(Base64.getEncoder().encode(pdfDoc)));
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("application/pdf");
metadata.setContentLength(pdfDoc.length);
request.setMetadata(metadata);
s3Client.putObject(request);
}
}
最佳答案
为了扩展 @AlexGoja 所说的内容,有 three constructors对于 PutObjectRequest
。 One of them需要三个字符串。但是,第三个字符串参数不是 Base64 编码的文件。我不确定你从哪里得到的。您想使用the constructor that takes a File上传文件:
public class App {
private static String PDF_PATH = "/tmp/pdf-test.pdf";
public static void main(String[] args) throws IOException {
// prepare AWS credential
BasicAWSCredentials awsCreds = new BasicAWSCredentials("xxx",
"yyy");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion("aaa")
.withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();
// upload a test PDF
File pdfFile = new File(PDF_PATH);
PutObjectRequest request = new PutObjectRequest("aaa", "bbb", pdfFile );
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("application/pdf");
metadata.setContentLength(pdfFile.length());
request.setMetadata(metadata);
s3Client.putObject(request);
}
}
关于java - 尝试将文件上传到 Amazon S3 时返回错误代码 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251651/