簡體   English   中英

上傳到Amazon S3時命名文件

[英]Naming files when uploading to Amazon S3

我正在嘗試將文件上傳到Amazon S3,沒什么特別的。 我已設法進行實際上傳,文件上傳成功。 剩下的唯一問題是我無法在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);

任何幫助深表感謝。

非常感謝 :)

上傳請求中的key實際上是您的對象(文件)密鑰(名稱),而不是您的AWS密鑰。 每當您實例化client實例時,都是指定AWS憑據的時間。

您是否可以更具體地了解您在執行此操作時遇到的錯誤?

好吧,我最近第一次使用了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));
}

暫無
暫無

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

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