2014-10-31 92 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壓縮或放氣)