我試圖將文件上傳到Amazon S3,沒什麼特別的。我設法做了實際的上傳,併成功上傳了文件。剩下的唯一問題是我無法在S3中更改文件的名稱。似乎默認情況下,文件的名稱被設置爲與密鑰相同。可能是因爲我將密鑰作爲參數發送,而不是發送文件的名稱。但是,我試着改變周圍的參數,並支持錯誤。上傳到Amazon S3時命名文件
下面請找我使用的代碼:
Bucket bucket = client.createBucket("testBucket", Region.EU_Ireland);
List<PartETag> partTags = new ArrayList<>();
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(
bucket.getName(), secretAmazonKey);
InitiateMultipartUploadResult result = client
.initiateMultipartUpload(request);
File file = new File(filePath);
long contentLength = file.length();
long partSize = 8 * 1024 * 1024;
try {
// Uploading the file, part by part.
long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++) {
// Last part can be less than 8 MB therefore the partSize needs
// to be adjusted accordingly
partSize = Math.min(partSize, (contentLength - filePosition));
// Creating the request for a part upload
UploadPartRequest uploadRequest = new UploadPartRequest()
.withBucketName(bucket.getName()).withKey(secretAmazonKey)
.withUploadId(result.getUploadId()).withPartNumber(i)
.withFileOffset(filePosition).withFile(file)
.withPartSize(partSize);
// Upload part and add response to the result list.
partTags.add(client.uploadPart(uploadRequest).getPartETag());
filePosition += partSize;
}
}
catch (Exception e) {
client.abortMultipartUpload(new AbortMultipartUploadRequest(bucket
.getName(), secretAmazonKey, result.getUploadId()));
}
CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(
bucket.getName(), secretAmazonKey, result.getUploadId(), partTags);
client.completeMultipartUpload(compRequest);
任何幫助深表感謝。
感謝很多:)
正如你所說,我用的密鑰,而不是文件密鑰(即文件名在S3上)。感謝您的幫助球員:) – lvella 2012-07-17 14:28:42