如何将带有中文字符的文件添加到amazon S3

时间:2015-12-08 06:09:24

标签: java amazon-web-services amazon-s3

我有一个从java写入S3的json。 json有一个中文描述字段。 首先,我尝试将json写入普通文件并将其写入S3。但是汉字被破坏了。然后我尝试将json写入" UTF-8"所以使用了下面的代码

angular.module('app', [])
  .controller('MyController', ['user', '$http', MyController]);

function MyController(user, $http) {
  this.user = user;
  this.$http = $http;
}

// Before switching to a new component, this hook runs for 
// each active component in the app. If any of them 
// return false, a rejected promise, or a promise that resolves to false,
// the navigation is cancelled.

MyController.prototype.canActivate = function() {
  return this.user.isAdmin;
};

//This hook fires just before the nagivation finishes.

MyController.prototype.activate = function() {
  return this.bigFiles = this.$http.downloadBigFiles();
};

当我尝试这个时,正确地将数据写入文件,我使用Notepad ++验证了该文件。但是当我把它写到S3时它再次被破坏了。更糟糕的是,当这样的事情发生时,如果文件已经存在,则该对象将从S3中删除。所以,问题是我必须使用java客户端将带有中文字符的文件写入S3,它应该存储为中文字符。任何帮助深表感谢。提前致谢

作为参考,这是json

Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), "UTF8"));
byte[] bt = jsonData.toString().getBytes();
out.append(new String(bt));                     
out.flush();
out.close();

2 个答案:

答案 0 :(得分:2)

你应该看看https://github.com/minio/mc

我们支持开箱即用的unicode字符。

$ mc ls https://s3.amazonaws.com/miniocloud/本語.txt
[2015-10-02 10:56:37 PDT] 5.8KiB 本語.txt

' MC' Linux,OS X和Windows也支持。请在https://gitter.im/minio/minio向我们提供您的反馈和任何问题。

答案 1 :(得分:0)

我已经解决了这个问题。我做的是,我把json写成文件

    File f = new File(fileName);
        if (f.exists()) {
            f.delete();
        } else {
            f.createNewFile();
        }
    Writer out = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(f), "UTF-8"));
    byte[] bt = jsonData.toString().getBytes("UTF-8");
    out.append(new String(bt));
    out.flush();
    out.close();
    if (f.exists()) {
            PutObjectResult res = s3rwclient
                    .putObject(new PutObjectRequest(bucket, key, f));
    } 

这解决了问题:)