当我们将文件上传到S3,然后再次从界面下载时,发现上传文件的简体中文是乱码。
问题与解决方案
这是因为上传文件时文件的元数据被设置为文本。
如果出现这种情况,上传文件中的简体中文就会显示为乱码。
源码上传时,如果使用文本上传,则默认使用文本。
虽然所有文本都使用UTF-8,但是由于这个UTF-8没有BOM格式,所以没有办法识别它是UTF-8版本。
所以我们需要在这里设置元数据。
byte[] bytes = newsletterJSON.getBytes(StandardCharsets.UTF_8);
ByteArrayInputStream contentsAsStream = new ByteArrayInputStream(bytes);
ObjectMetadata md = new ObjectMetadata();
md.setContentType(MediaType.JSON_UTF_8.toString());
PutObjectResult putObjectResult = s3Client.putObject("com.ossez.real.estate", "kb/newsletter.json", contentsAsStream, md);
考虑上面的代码。
在上面的代码中,我们设置了对象中的内容类型。
其他
另外,如果将其保存为文件,然后使用S3客户端从文件中读取并上传,则不会出现此问题。
当内存中存储的数据直接上传到S3时,就会存在这个问题。