簡體   English   中英

Amazon S3存儲桶路徑問題

[英]Amazon s3 bucket path issue

我是amazons3的新手,我想將文件上傳到s3存儲桶。 所以我正在為此用Java寫一個代碼,但是我不怎么指定存儲桶的路徑。 有人可以幫助我嗎? 請幫助查找解決方案以獲取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)

S3不像Linux文件系統。

S3存儲器由存儲桶組成,這些存儲桶在完全平坦的空間中包含對象。 “文件夾”的概念是人為的:鍵為“ foo”的對象與鍵為“ path / to / bar”的對象存在於同一平面存儲空間中。 沒有創建文件夾的單獨步驟。 您只需給您的對象一個鍵,其名稱包含諸如'/'之類的分隔符,就可以通過一些涉及公共前綴的LIST API將存儲桶視為具有文件夾。

但是,必須先創建一次存儲桶 ,然后才能將內容存儲在其中。 除其他事項外,您必須指出應在哪個區域托管該存儲桶中的對象。

您提供的存儲桶名稱不正確,或者您沒有創建存儲桶。

您需要查看有關存儲桶限制的文檔。 從文檔中

  • 值區名稱必須至少3個且不超過63個字符。
  • 值區名稱必須是一系列的一個或多個標簽。 相鄰標簽之間用單個句點(。)分隔。 值區名稱可以包含小寫字母,數字和連字符。 每個標簽必須以小寫字母或數字開頭和結尾。
  • 存儲桶名稱不得格式化為IP地址(例如192.168.5.4)。
  • 當將虛擬托管樣式的存儲桶與SSL結合使用時,SSL通配符證書僅與不包含句點的存儲桶匹配。 要解決此問題,請使用HTTP或編寫您自己的證書驗證邏輯。 我們建議您不要在存儲桶中使用句點(“。”)
    名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM