2014-10-31 90 views
1

我有一个上传文件到云中包含西里尔文字母(right_file_кириллица.csv)的问题。我的代码是:亚马逊S3和文件名中的西里尔字母

ObjectMetadata meta = new ObjectMetadata(); 
meta.setContentEncoding("UTF-8"); 
PutObjectRequest por = new PutObjectRequest(s3Bucket, f.asPath(), new ByteArrayInputStream(bos.toString("UTF-8").getBytes(Charset.forName("UTF-8"))), meta); 
PutObjectResult result = s3Client.putObject(por); 

bos - 这是ByteArrayOutputStream。这导致异常:

com.amazonaws.services.s3.model.AmazonS3Exception: The request signature we calculated does not match the signature you provided. Check your key and signing method. (Service: Amazon S3; Status Code: 403; Error Code: SignatureDoesNotMatch; Request ID: A796905192C41ED5) 
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:937) 
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:506) 
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:273) 
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3660) 
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1432) 

我在所有可能的地方设置编码UTF-8。那么,有没有人知道如何解决这个问题? 由于

+0

你的aws-sdk版本是什么? – ashokramcse 2014-11-03 11:21:37

回答

2

此信息需要在的ContentType,而不是被设置在内容编码:

ObjectMetadata meta = new ObjectMetadata(); 
meta.setContentType("text/html; charset=utf-8"); 

内容编码通常用于指示是否体已被压缩(如设置值gzip压缩或放气)