文件名中的Amazon S3和西里尔字母 [英] Amazon S3 and cyrillic letters in file name

查看:109
本文介绍了文件名中的Amazon S3和西里尔字母的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在将文件上传到包含西里尔字母(right_file_кириллица.csv)的云时遇到问题.我的代码是:

I have a problem uploading file to cloud that contains cyrillic letters (right_file_кириллица.csv). My code is:

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.这会导致异常:

bos - this is ByteArrayOutputStream. And this cause exception:

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编码.那么,有人知道如何解决该问题吗? 谢谢

I set encoding UTF-8 in all places where it possible. So, does anybody know how to fix that? Thanks

推荐答案

此信息需要在ContentType中设置,而不是在Content-Encoding中设置:

This information needs to be set in the ContentType and not in the Content-Encoding:

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

Content-Encoding通常用于指示主体是否已压缩(例如设置值gzip或deflate)

Content-Encoding is typically used to indicate if the body has been compressed (like setting values gzip or deflate)

这篇关于文件名中的Amazon S3和西里尔字母的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆