在AWS S3中更新txt文件 - 将Uint8Array转换为String

时间:2017-09-16 23:46:31

标签: string amazon-web-services amazon-s3 utf-8

我正在尝试为我的应用创建一个反馈按钮。它基本上只是写入文本文件,但它目前用新的反馈字符串替换现有的文本文件。所以基本上我需要获取当前文本文件并将该文本文件中的文本与新反馈连接起来,这样它就不会覆盖任何内容。

问题是每当我收到这个文本文件时它会给我一个看起来像Uint8Array的对象:

enter image description here

这些日志的最后一行是要添加到文本文件的String。正上方是从aws调用返回的对象。你可以看到它是一些对象而不是字符串。所以在我的.txt文件中,它正在上传一个[object Object]。第二个日志让我相信该对象是一个Uint8Array,因为Body。

我的代码看起来像这样:

        function uploadLog(message, key) {
            var moment = {key: key};
            var deferred = $q.defer();
            awsServices.getObject(key).then(function(data) {
                console.log("NEW MESSAGE");
                console.log(data);
                data = new TextDecoder("utf-8").decode(data.Body);
                // data = Utf8ArrayToStr(data.Body);
                console.log(data);
                console.log(message);
                newMessage = message.toString() + '\r\n\r\n' + data;
                var blob = new Blob([newMessage.toString()], {type: "text"});
                var file =  new File([blob], key);
                awsServices.upload(file, moment.key, moment).then(function() {
                    deferred.resolve();
                }, function(error) {
                    console.log("UPLOAD LOG REJECT");
                    deferred.reject();
                });
            }, function(error) {
                console.log("ERROR");
                console.log(error);
                deferred.reject();
            });
            return deferred.promise;
        };

我基本上只是从AWS获取文本文件,读取它,将新字符串连接到文件上然后重新上传它。

现在我尝试了各种函数将Uint8Array转换为String这样的字符串:

https://ourcodeworld.com/articles/read/164/how-to-convert-an-uint8array-to-string-in-javascript

和这一个:

Conversion between UTF-8 ArrayBuffer and String

Niether似乎工作(仍然打印为[对象],我也尝试过TextDecoder。

有没有人在AWS S3中更新过文本或日志文件?你是怎么做到的?我有点怀疑这个文件不是Uint8Array文件,否则这些转换方法就可以了。

编辑:

            awsServices.getObject(key).then(function(data) {
                console.log("UPLOAD LOG");
                console.log(typeof(data)); //object
                console.log(data); //*Screenshot above
                console.log(data instanceof Blob); //false
                console.log(data instanceof ReadableStream); //false
                console.log(data instanceof Object); //true
                data = uintToString(data.Body);
                console.log(typeof(data)); //string
                console.log(data); //[object Object]
                newMessage = message.toString() + '\r\n\r\n' + data;
                var blob = new Blob([newMessage.toString()], {type: "text"});
                var file =  new File([blob], key);
                awsServices.upload(file, moment.key, moment).then(function() {
                    deferred.resolve();
                }, function(error) {
                    console.log("UPLOAD LOG REJECT");
                    deferred.reject();
                });
            }, function(error) {

1 个答案:

答案 0 :(得分:2)

确保S3对象元数据具有正确的内容类型:set Content-Type = text / plain。

然后使用data.Body.toString('ascii')或其他一些编码,例如utf-8。