上传到AWS S3存储桶时更改文件名

时间:2015-09-18 07:47:05

标签: java amazon-web-services file-upload amazon-s3 aws-sdk

我正在尝试将csv文件上传到S3存储桶。代码运行成功,但是当我检查存储桶时,会上传名为Access Key的文件。我必须手动重命名文件以检查其内容。

有没有办法只能以编程方式重命名文件,或者文件名在上传时不会自动更改?

请检查以下代码:

public class AwsFileUploader {

private static String bucketName = "mybucket";
private static String accessKey = "my-access-key";
private static String secretKey = "my-secret-key";
private static String uploadFileName = "CompressionScore/compression_score_09-04-2015.csv";

public static void main(String[] args) throws IOException {

    AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);

    AmazonS3 s3client = new AmazonS3Client(credentials);

    try {
        System.out.println("Uploading a new object to S3 from a file\n");
        File file = new File(uploadFileName);
        System.out.println(file.getName());   //prints - compression_score_09-04-2015.csv
        s3client.putObject(new PutObjectRequest(bucketName, accessKey, file));
        System.out.println("File successfully uploaded");
    } catch (AmazonServiceException ase) {
        ase.printStackTrace();
    } catch (AmazonClientException ace) {
        ace.printStackTrace();
    }
}

}

理想情况下,存储桶中的文件应使用名称compression_score_09-04-2015.csv,而应使用AKAJI3EBMILBCWENUSA。 有人可以指导应该做什么吗?

1 个答案:

答案 0 :(得分:3)

在PutObjectRequest构造函数中,key参数实际上是上传文件的名称,而不是访问密钥。

来自SDK文档:

  

参数:bucketName -

所在的现有存储桶的名称      

将上传新对象。

     

key - 存储新对象的密钥。

     

input - 要上传到Amazon S3的数据流。元数据 - 对象元数据。

     

至少指定数据流的内容长度   正在上传。

来源:PutObjectRequest constructor detail

您不必在此指定accessKey,因为您已使用包含访问密钥和密钥的凭据实例化AmazonS3Client对象。