AWS 上传的 S3 文件重新载入的时候简体中文显示乱码

在我们将文件上传到 S3 后再次重新从界面中下载的时候发现上传文件的简体中文为乱码。

问题和解决

这是因为在上传的文件的时候文件的 meta 数据设置为 text。

如果是这样的话,上传的文件中的简体中文会显示为乱码。

在源代码上传中,如果使用的是 String 进行上传的话,将会默认使用 text。

尽管所有的文本中都使用了 UTF-8,但是因为这个 UTF-8 是没有 BOM 格式的,因此没有办法识别为 UTF-8 版本。

因此我们在这里需要设置 metadata 元数据。


        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);

考虑上面的代码。

在上面的代码中,我们设置了 ObjectMetadata 对象中的内容类型。

其他

另外,如果你将 String 保存为文件,然后使用 S3 的客户端从文件中读取后上传的话是没有这个问题的。

这个问题的存在就是将 String 保存在内存中的数据直接上传到 S3 上。