2016-05-13 194 views
1

我是新来的amazons3我想上传一个文件到s3桶。所以我正在为java编写代码,但我不知道如何指定桶的路径。任何人都可以帮助我。 请帮助找到获取s3存储桶正确路径的解决方案。亚马逊s3桶路径问题

public class SampleS3 { 

    private static final String SUFFIX = "/"; 
    private static String existingBucketName = "s3-buckt path"; 
    private static String AccessKey = "accesskey"; 
    private static String SecretAccessKey = "SecretAccessKey"; 
    private static String keyName = "mypic.JPG"; 
    private static String filePath = "/home/dll files/samplefile.txt"; 
    private static String amazonFileUploadLocationOriginal = existingBucketName+ "/"; 


    public static void main(String[] args) throws IOException { 

     executeUpload(); 
    } 

    private static void executeUpload() { 

     AWSCredentials credentials = new BasicAWSCredentials(AccessKey, 
       SecretAccessKey); 

     AmazonS3 s3Client = new AmazonS3Client(credentials); 
     String folderName = "testfolder"; 
     createFolder(existingBucketName, folderName, s3Client); 
     String fileName = folderName + SUFFIX + "testvideo.mp4"; 
     s3Client.putObject(new PutObjectRequest(existingBucketName, fileName, 
       new File(filePath)) 
       .withCannedAcl(CannedAccessControlList.PublicRead)); 
    } 

    public static void createFolder(String bucketName, String folderName, 
      AmazonS3 client) { 
     ObjectMetadata metadata = new ObjectMetadata(); 
     metadata.setContentLength(0); 
     InputStream emptyContent = new ByteArrayInputStream(new byte[0]); 
     PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, 
       folderName + SUFFIX, emptyContent, metadata); 
     client.putObject(putObjectRequest); 
    } 

} 

当我运行程序我得到的错误是:

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: 2D45010A48E44C42), S3 Extended Request ID: c7zzSgYO8bNUh9HoOVVmAbjjtG7G6w5tQmuSIqTmgf3cGqjclTrJS3WIXvPpV7Mt 
    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 com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826) 
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1405) 
    at com.qagate.s3.amazons3.SampleS3.createFolder(SampleS3.java:65) 
    at com.qagate.s3.amazons3.SampleS3.executeUpload(SampleS3.java:45) 
    at com.qagate.s3.amazons3.SampleS3.main(SampleS3.java:33) 
+0

显示您到目前为止尝试过的代码。 –

+0

我想知道如何使用s3桶路径 –

+0

您的桶名称有一个空间,我不认为这是苍蝇:http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions。 html –

回答

2

S3不像是一个Linux文件系统。

S3存储由包含完全平坦空间中的对象的存储桶组成。 “文件夹”的概念是人为的:带有键“foo”的对象与键为“path/to/bar”的对象位于同一个平面存储桶名称空间中。没有单独创建文件夹的步骤;你只需给你的对象一个名字中包含分隔符如'/'的键,并且你可以通过一些涉及通用前缀的LIST API将这些桶视为具有文件夹。

但是,存储桶必须先创建一次,然后才能将事物存储在其中。除了别的以外,你必须指出哪个区域应该托管那个桶中的对象。

0

您提供的存储桶名称不正确,或者您没有创建存储桶。

您需要查看有关Bucket Restriction的文档。从文档

  • 存储桶名称必须至少3和不超过63个字符长。
  • 存储桶名称必须是一系列一个或多个标签。相邻标签由一个单独的句点(。)分隔。存储桶名称可以包含小写字母,数字和连字符。每个标签必须以 开始并以小写字母或数字结尾。
  • 存储桶名称不得格式化为IP地址(例如, 192.168.5.4)。
  • 将虚拟托管式存储区与SSL配合使用时,SSL通配符证书仅匹配不包含句点的存储区。要围绕此工作 ,请使用HTTP或编写自己的证书验证逻辑。我们建议您不要在存储桶
    名称中使用句点(“。”)。