Java 如何将文件上载到AWS S3 Bucket?

Java 如何将文件上载到AWS S3 Bucket?,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我正在创建一个简单的应用程序,我想在其中上传一个文件到我的AWS S3存储桶。这是我的密码: import java.io.File; import java.io.IOException; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.

我正在创建一个简单的应用程序,我想在其中上传一个文件到我的AWS S3存储桶。这是我的密码:

import java.io.File;
import java.io.IOException;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.fasterxml.jackson.*;

public class UploadFileInBucket {

    public static void main(String[] args) throws IOException {
        String clientRegion = "<myRegion>";
        String bucketName = "<myBucketName>";
        String stringObjKeyName = "testobject";
        String fileObjKeyName = "testfileobject";
        String fileName = "D:\\Attachments\\LICENSE";

        try {

            BasicAWSCredentials awsCreds = new BasicAWSCredentials("<myAccessKey>", "<mySecretKey>");
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                    .build();

            // Upload a text string as a new object.
            s3Client.putObject(bucketName, stringObjKeyName, "Uploaded String Object");

            // Upload a file as a new object with ContentType and title specified.
            PutObjectRequest request = new PutObjectRequest(bucketName, fileObjKeyName, new File(fileName));
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setContentType("plain/text");
            metadata.addUserMetadata("x-amz-meta-title", "someTitle");
            request.setMetadata(metadata);
            s3Client.putObject(request);
        }
        catch(AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process 
            // it, so it returned an error response.
            e.printStackTrace();
        }
        catch(SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
导入java.io.File;
导入java.io.IOException;
导入com.amazonaws.AmazonServiceException;
导入com.amazonaws.SdkClientException;
导入com.amazonaws.auth.AWSStaticCredentialsProvider;
导入com.amazonaws.auth.BasicAWSCredentials;
导入com.amazonaws.auth.profile.ProfileCredentialsProvider;
导入com.amazonaws.services.s3.AmazonS3;
导入com.amazonaws.services.s3.AmazonS3ClientBuilder;
导入com.amazonaws.services.s3.model.ObjectMetadata;
导入com.amazonaws.services.s3.model.PutObjectRequest;
导入com.fasterxml.jackson.*;
公共类上载FileInBucket{
公共静态void main(字符串[]args)引发IOException{
字符串clientRegion=“”;
字符串bucketName=“”;
字符串stringObjKeyName=“testobject”;
字符串fileObjKeyName=“testfileobject”;
String fileName=“D:\\Attachments\\LICENSE”;
试一试{
BasicAWSCredentials awsCreds=新的BasicAWSCredentials(“,”);
AmazonS3 s3Client=AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.具有凭证(新的AWSStaticCredentialsProvider(awsCreds))
.build();
//将文本字符串作为新对象上载。
s3Client.putObject(bucketName、stringObjKeyName、“上传的字符串对象”);
//将文件作为指定了ContentType和标题的新对象上载。
PutObjectRequest=新的PutObjectRequest(bucketName、fileObjKeyName、新文件(文件名));
ObjectMetadata=新的ObjectMetadata();
metadata.setContentType(“纯文本”);
addUserMetadata(“x-amz-meta-title”、“someTitle”);
setMetadata(元数据);
s3Client.putObject(请求);
}
捕获(AmazonServiceException e){
//呼叫已成功传输,但Amazon S3无法处理
//它,所以它返回了一个错误响应。
e、 printStackTrace();
}
捕获(SDKClientexe){
//无法联系Amazon S3以获取响应,或者无法联系客户端
//无法分析来自Amazon S3的响应。
e、 printStackTrace();
}
}
}
我无法上载文件,出现以下错误:

Exception in thread "main" java.lang.NoSuchFieldError: 

    ALLOW_FINAL_FIELDS_AS_MUTATORS
        at com.amazonaws.partitions.PartitionsLoader.<clinit>(PartitionsLoader.java:52)
        at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
        at com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:64)
        at com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:52)
        at com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:105)
        at com.amazonaws.client.builder.AwsClientBuilder.getRegionObject(AwsClientBuilder.java:249)
        at com.amazonaws.client.builder.AwsClientBuilder.withRegion(AwsClientBuilder.java:238)
        at UploadFileInBucket.main(UploadFileInBucket.java:28)
线程“main”java.lang.NoSuchFieldError中出现异常: 允许\u最终\u字段\u作为\u变量 位于com.amazonaws.partitions.PartitionsLoader。(PartitionsLoader.java:52) 位于com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30) 在com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:64)上 位于com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:52) 位于com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:105) 位于com.amazonaws.client.builder.AwsClientBuilder.getRegionObject(AwsClientBuilder.java:249) 位于com.amazonaws.client.builder.AwsClientBuilder.withRegion(AwsClientBuilder.java:238) 在UploadFileInBucket.main(UploadFileInBucket.java:28) 我已经添加了执行此代码所需的AWS bucket凭据、权限和依赖项


我应该在代码中做什么更改才能将文件上载到所需的bucket

您需要将Jackson添加到类路径中。它的课程不见了。
我不知道您需要哪个版本,但您可以从他们的gitpage下载它们:

看起来您可能使用了错误版本的Jackson库,或者以某种方式链接了多个版本的库


AWS for Java SDK发行版包含一个第三方/lib目录,其中包含构建SDK版本时应使用的所有库(正确版本)。根据您使用的SDK的哪些功能,您可能不需要所有这些功能,但这些是您应该使用的特定第三方库。

您是否在本地运行此代码,以及如何包含AWS依赖项?是,我正在本地运行它,并添加了所有必需的依赖项。如果它是一个maven应用程序运行
maven update
No,实际上它不是maven。您的类路径中是否有
com.fasterxml.jackson.databind
的jar文件已添加了相同的依赖项。仍然存在相同的问题。请提供任何建议?异常说明找不到jackson类。应用程序找不到依赖项。你能编辑你的问题并添加1)你的文件夹/文件结构和2)你如何运行应用程序吗。然后我将编辑我的答案。谢谢你的建议,更新了依赖项。当前存在“Mutator”问题。请参考更新后的问题。有什么建议吗?问题在本票据中描述: