2016-05-13 234 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或編寫自己的證書驗證邏輯。我們建議您不要在存儲桶
    名稱中使用句點(「。」)。