Tag: amazon s3

Amazon Web Services(AWS)S3 Java创建子目录(对象)

我熟悉AWS Java SDK ,我也尝试浏览相应的Javadoc ,但我无法实现如何创建子目录,即存储桶中的目录对象,以及如何上传文件。 假设bucketName和dirName对应于已经存在的存储桶(具有公共权限)和需要在存储桶中创建的新(对象)目录(即bucketName / dirName /) 我尝试过以下方法: AmazonS3Client s3 = new AmazonS3Client( new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY)); s3.createBucket(bucketName + “/” + dirName); //throws exception 这会在第二行引发exception。 我们将非常感谢您创建子目录并将文件上传到其中的简短代码段。

将BufferedImage对象作为文件保存到Amazon S3

我目前使用以下内容将文件上传到S3: File file = new File(my_file_path); AmazonS3 s3 = new AmazonS3Client(new PropertiesCredentials(cred)); s3.putObject(new PutObjectRequest(“folder”, key, file)); 以上工作正常,但我想直接将一个BufferedImage保存到S3,从我的应用程序中刮几秒钟,但我不知道如何做到这一点? 这就是我目前将图像保存到文件的方式: image = new BufferedImage(rawImage.width, rawImage.height, BufferedImage.TYPE_INT_ARGB); File file = new File(filepath); ImageIO.write(image, “png”, file); 有没有办法直接写入Amazon S3作为流,如果是这样,有人可以展示一个例子吗? 另外,这是个好主意吗? 如果它容易出错,我会坚持我现在的方法。 任何建议表示赞赏

将大文件上载到Amazon S3时出现问题

我尝试使用Amazon-SDK(Java)示例代码S3TransferProgressSample.java将大文件上传到Amazon-S3存储( 也在AWS docs上发布 )。 但是当我尝试上传11 GB文件时,上传卡在不同的位置,并显示错误消息: Unable to upload file to Amazon S3: Unable to upload part: Unable toexecute HTTP request: Unbuffered entity enclosing request can not be repeated ” (attached screenshot). 看起来在IOException发生后,SDK无法重试请求(见下文)。 有没有人遇到这个? 解决这个问题的最佳做法是什么? 任何代码都表示赞赏。 INFO: Received successful response: 200, AWS Request ID: 2B66E7669E24DA75 Jan 15, 2011 6:44:46 AM com.amazonaws.http.HttpClient execute INFO: Sending Request: […]

在Java SDK Amazon S3中配置路径样式

我正在使用Amazon提供的AWS Java SDK与S3服务进行交互。 似乎默认情况下,SDK使用虚拟主机样式用于存储桶(即存储桶由存储桶名称 .s3.amazonaws.com提供。示例: PUT / HTTP/1.1 Host: a-given-bucket.s3.amazonaws.com Date: Tue, 26 Jun 2012 10:39:40 GMT Content-Type: application/x-www-form-urlencoded; charset=utf-8 Content-Length: 0 但是,我需要在我的应用程序中使用path-style,如下所示: PUT /a-given-bucket/ HTTP/1.1 Host: s3.amazonaws.com Date: Thu, 21 Jun 2012 16:27:32 GMT Content-Type: application/x-www-form-urlencoded; charset=utf-8 Content-Length: 0 可以在Java SDK中使用路径样式吗? 在积极的情况下,我该怎么办? 我看过ClientConfiguration和AmazonS3Client类,但我没有看到任何方法来做… 我的SDK版本在重要的情况下是:2.0.0v201206151133。 谢谢! 费尔明 PD。 为简单起见,样本中省略了一些标题。 编辑:这样的function(配置AmazonS3Client使用的URL路径样式)非常有用,如果你的桶中有一个点(“。”)。 具有虚拟主机风格的HTTPS请求不起作用,请参阅此内容 。

如何通过SDK设置S3对象的内容类型?

我正在尝试使用AWS Api设置多个对象的内容类型,并向其添加“content-encoding:gzip”标头。 这是我的代码: for (S3ObjectSummary summary : objs.getObjectSummaries() ) { String key = summary.getKey(); if (! key.endsWith(“.gz”)) continue; ObjectMetadata metadata = new ObjectMetadata(); metadata.addUserMetadata(“Content-Encoding”, “gzip”); metadata.addUserMetadata(“Content-Type”, “application/x-gzip”); final CopyObjectRequest request = new CopyObjectRequest(bucket, key, bucket, key) .withSourceBucketName( bucket ) .withSourceKey(key) .withNewObjectMetadata(metadata); s3.copyObject(request); } 但是当我运行它时,结果如下: 正如您所看到的,前缀x-amz-meta已添加到我的自定义标头中,并且它们的内容较低。 content-type标题被忽略,而是将www/form-encoded作为标题。 我能做些什么来使它接受我的标题值?

亚马逊S3列出“目录”

我通过AWS S3管理控制台在S3中创建了一个层次结构。 如果我运行以下代码来列出存储桶: AmazonS3 s3 = new AmazonS3Client(CRED); ListObjectsRequest lor = new ListObjectsRequest() .withBucketName(“myBucket”) .withPrefix(“code/”); ObjectListing objectListing = s3.listObjects(lor); for (S3ObjectSummary summary: objectListing.getObjectSummaries()) { System.out.println(summary.getKey()); } 我明白了: code/ code/03000000-0001-0000-0000-000000000000/ code/03000000-0001-0000-0000-000000000000/special.js code/03000000-0001-0000-0000-000000000000/test.js code/03000000-0002-0000-0000-000000000000/ 这正是我所期待的。 如果我添加一个分隔符,所以我只在“代码/”下直接列出内容我现在不会得到任何子“目录”。 更改上面的行(在末尾添加withDelimiter()): ListObjectsRequest lor = new ListObjectsRequest().withBucketName(“myBucket”) .withPrefix(“code/”) .withDelimiter(“/”); 我现在只得到: code/ 我知道S3没有“目录”,而是分隔键,但这种行为看起来很奇怪? 我如何列出仅在“代码”下方的内容?

AWS S3 Java:d​​oesObjectExist导致403:FORBIDDEN

我在使用AWS SDK与我的Java程序进行交互时遇到了麻烦。 这是我用来创建S3客户端的代码: public S3StorageManager(S3Config config) throws StorageException { BasicAWSCredentials credentials = new BasicAWSCredentials(myAccessKey(), mySecretKey()); AWSStaticCredentialsProvider provider = new AWSStaticCredentialsProvider(credentials); this.s3Client = AmazonS3ClientBuilder .standard() .withCredentials(provider) .withRegion(myRegion) .build(); 当我尝试下载文件时,在开始下载之前,我检查文件是否存在: s3Client.doesObjectExists(bucketName, objectName); 这是我得到的地方403:FORBIDDEN。 奇怪的是,只有当我在同一会话中执行上传之前尝试执行对象存在检查时才会引发此问题。 换句话说,在初始化s3Client之后: – 如果我首先尝试检查对象是否存在,则会引发FORBIDDEN问题; – 如果我第一次执行文件上传,它工作正常,之后任何对象存在检查也可以正常工作; 这是我的堆栈跟踪: com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden; Reques t ID: A23BB805491E411F) at […]

AWS S3无需访问和密钥在Java中上载

我想在不使用AWS服务器的访问权限和密钥的情况下将文件上传到S3。 AWS键应作为默认值。 但是,在服务器中运行以下命令,我可以访问它而无需提供任何访问和密钥。 aws s3 cp somefile.txt s3:// somebucket / 从Java代码,它无法访问,因为它无法加载凭据。 以下是我的代码。 AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());

Spring Batch – 从Aws S3读取文件

我正在尝试从AWS S3读取文件并使用Spring Batch处理它: Spring Itemreader可以处理此任务吗? 如果是这样,我如何将凭据传递给S3客户端并配置我的spring xml以读取文件或多个文件

com.amazonaws.services.s3.model.AmazonS3Exception:拒绝访问

这是我的Java代码: AmazonS3 conn = new AmazonS3Client(); AmazonS3URI uri = new AmazonS3URI(s3uri); ObjectListing objects = conn.listObjects(uri.getBucket(), uri.getKey()); 一个非常简单的任务,我尝试使用AmazonS3 Java客户端来访问S3,但这行conn.listObjects一直失败并给了我以下exception: Exception in thread “main” com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: XXXXXXXX), S3 Extended Request ID: xxxxxxxxx at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1389) at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:902) at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:607) at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376) at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287) at […]