![](/img/trans.png)
[英]Java - Amazon S3 bucket upload issue with braces “()” not uploading
[英]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.