2012-07-13 289 views
1

我試圖將文件上傳到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); 

任何幫助深表感謝。

感謝很多:)

回答

4

key在上傳請求實際上是你的對象(文件)鍵(名字),而不是您的AWS的密鑰。每當你實例化你的實例時,這是你指定你的AWS證書的時候。

您能更具體地瞭解您在執行此操作時看到的錯誤嗎?

+0

正如你所說,我用的密鑰,而不是文件密鑰(即文件名在S3上)。感謝您的幫助球員:) – lvella 2012-07-17 14:28:42

-1

好吧,我用Amazon S3的首次最近才得以上傳如下文件:

public void saveMinutes(Minutes minutes, byte [] data) 
{ 

    AmazonS3 s3 = new AmazonS3Client(new BasicAWSCredentials(amazonS3AccessKey, amazonS3SecretAccessKey)); 
    ObjectMetadata metaData = new ObjectMetadata(); 
    metaData.setContentLength(data.length); 
    metaData.setContentType("application/pdf"); 
    s3.putObject(new PutObjectRequest(amazonS3MinutesBucketName, minutes.getFileName(), new ByteArrayInputStream(data), metaData)); 
} 
相關問題