当前位置: 首页 > 知识库问答 >
问题:

如何上传文件到AWS桶与AWSJavaSDK 2

陈昊昊
2023-03-14

AWS Java SDK 2.15.73(当前最新版本)。Java 1.8.222操作系统IBM AIX 7.1

开发一个将文件上传到S3 bucket的应用程序。

在Maven pom文件中:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>software.amazon.awssdk</groupId>
            <artifactId>bom</artifactId>
            <version>2.15.73</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>s3</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>apache-client</artifactId>
      <version>2.0.0-preview-10</version>
    </dependency>           
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>http-client-spi</artifactId>
      <version>2.0.0-preview-10</version>
    </dependency>           
</dependencies>

Stacktrace的开始:

异常在sendFileToAWSNoAuth=无法马歇尔请求JSON: BasUri不得为空。software.amazon.awssdk.core.exception.SdkClientExc0019:无法马歇尔请求JSON: BasUri不得为空。在software.amazon.awssdk.core.exception.SdkClientExc0019$BuilderImpl.build(SdkClientException.java:98)在software.amazon.awssdk.services.s3.transform.PutObject刚需arshaller.marshall(PutObject刚需arshaller.java:53)在software.amazon.awssdk.services.s3.transform.PutObject刚需arshaller.marshall(PutObject刚需arshaller.java:31)在software.amazon.awssdk.core.runtime.transform.Streaming刚需arshaller.marshall(Streaming刚需arshaller.java:48)

Java代码:

需要身份验证,并通过代理服务器执行。

字符串endPointURL=appParms.getProxyServer()“:”appParms.getProxyServerPort();

URI endPointUri=new URI(endPointURL);

ProxyConfiguration proxyConfig=ProxyConfiguration.builder().endpoint(endPointUri.build();

SdkHttpClient httpClient=ApacheSdkHttpClientFactory.builder().proxyConfiguration(proxyConfig.build().createHttpClient();

ProfileCredentialsProvider credentialsProfile=ProfileCredentialsProvider.builder().profileName(appParms.getProfileName()).build();

Region Region=Region.EU_CENTRAL_1;S3Client S3NoEncryption=S3Client.builder().credentialsProvider(credentialsProfile).region(region).endpointOverride(endPointUri).httpClient(httpClient).build();

String folderKey=appParms.getBucketFolder() "/" appParms.getFileName();

File aFile=新文件(appParms.getFilePath()“/”appParms.getFileName());

PutObjectRequest putOb=PutObjectRequest.builder()。桶(appParms.getBucketNameSSE())。key(folderKey)。构建();

PutObjectResponse=s3NoEncryption.putObject(putOb,aFile.toPath());

异常发生在最后一行(s3NonEncryption.put对象)

共有1个答案

宋飞文
2023-03-14

此基本URI不得为空错误是由S3Client.builder.中的endpoint Overide(endPointUri)引起的。

在http客户端创建中,还使用了类ApacheSdkHttpClientFactory,该类在运行时导致各种类型的类不匹配错误。

正确的方法是使用ApacheHttpClient类:

SdkHttpClient http pClient=ApacheHttpClient.builder(). proxyConfiguration(proxyConfig). ConnectionTimeout(Duration.ofMillis(30000)). build();

执行中仍然存在超时错误。

software.amazon.awssdk.core.exception.SdkClientException:无法执行HTTP请求:连接到bdw-landing-sse-test-s3.s3.eu-central-1.amazonaws.com:443[bdw-landing-sse-test-s3.s3.eu-central-1.amazonaws.com/52.219.72.81]失败:连接在software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build处超时位于software.amazon.awssdk.core.exception.SdkClientException.create(SdkClientException.java:43)的software.amazon.awssdk.core.internal.http.pipeline.stages.utils.RetryableStageHelper.setLastException(RetryableStageHelper.java:198)

 类似资料:
  • 我一直在尝试将文件上传到s3存储桶。但该文件从未公开供查看。我必须手动将bucket中的文件/文件夹公开(每次上传时),以便查看。 有没有一种方法可以上传一个Android文件(位图),该文件的默认权限是在运行期间公开查看。如果可能的话,我更愿意通过编程来实现这一点。我查看了s3文档,没有找到任何有用的东西。

  • 我正试图通过React将文件上载到s3存储桶,我正在与4xx和5xx进行斗争:( 下面是我的代码库: 如果我发了这篇文章,我会得到500英镑,而这个错误是: java.io.IOException:UT000036:解析多部分数据时连接终止 我还注意到documents属性为空: 这是后端的API文档: 谢谢!

  • 我想从hadoop上传一些文件到AWS bucket。我有AWS访问密钥、保密密钥和S3导入路径。 我无法通过AWS CLI命令访问。我在aws凭证文件中设置了密钥。我尝试执行“aws s3 ls ”,但得到的错误是 由于上面的代码不起作用,我尝试使用distcp命令,如下所示。 对于上面的命令,我也得到下面的错误。 18/11/09 00:55:40信息http.AmazonHttpClient

  • 我是Dropwizard的新手。我想在我的项目中实现AWS S3文件上传服务。 我没有收到任何通过拖放在AWS S3上上传文件的教程。 我在pom.xml中添加了以下依赖项 我已经注册了多部分功能。将应用程序类的run()方法中的- 然后在资源类中定义方法为- 但在运行时,它显示以下日志:- 如何获取上传文件的url?如何通过编码检查文件上传?我遗漏了什么吗?有人知道这件事吗。如果dropwiza

  • 我试图在AWSS3中上传错误文件,但它显示错误,如“您试图访问的存储桶必须使用指定的endpoint寻址。请将所有未来的请求发送到此endpoint:”test9011960909。s3。亚马逊。com“ 我还指定了“区域”= 当我指定时,它正在工作 但我想把文件上传到主bucket的子文件夹中 我已经应用了AWS S3批准的答案:您试图访问的桶必须使用指定的终结点进行寻址 但仍然得到同样的错误,

  • 我正在使用lambda nodejs将文件上传到ftp服务器。 上传文件的源代码: index.js文件: 运行后的日志: 回应: 零 请求ID: “9c8e1701-ad54-42eb-8dc6-bbed77bc9b41” 函数日志: 开始请求id:9c8e 1701-ad54-42e b-8dc 6-bbed 77 BC 9 b 41版本:$最新 结束请求ID:9c8e1701-ad54-42