我需要一种有效的(读取本机)方式将ArrayBuffer转换为需要在多部分帖子上使用的base64字符串.
在Node.js项目中,我试图从S3获取数据.
当我使用时getSignedURL,一切正常:
aws.getSignedUrl('getObject', params, function(err, url){
console.log(url);
});
Run Code Online (Sandbox Code Playgroud)
我的参数是:
var params = {
Bucket: "test-aws-imagery",
Key: "TILES/Level4/A3_B3_C2/A5_B67_C59_Tiles.par"
Run Code Online (Sandbox Code Playgroud)
如果我将URL输出带到控制台并将其粘贴到Web浏览器中,它会下载我需要的文件.
但是,如果我尝试使用,getObject我会得到各种奇怪的行为.我相信我只是错误地使用它.这就是我尝试过的:
aws.getObject(params, function(err, data){
console.log(data);
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
输出:
{
AcceptRanges: 'bytes',
LastModified: 'Wed, 06 Apr 2016 20:04:02 GMT',
ContentLength: '1602862',
ETag: '9826l1e5725fbd52l88ge3f5v0c123a4"',
ContentType: 'application/octet-stream',
Metadata: {},
Body: <Buffer 01 00 00 00 ... > }
null
Run Code Online (Sandbox Code Playgroud)
所以它似乎正常运作.但是,当我在其中一个console.logs 上放置断点时,我的IDE(NetBeans)会抛出错误并拒绝显示数据的值.虽然这可能只是IDE,但我决定尝试其他方式使用getObject.
aws.getObject(params).on('httpData', function(chunk){
console.log(chunk);
}).on('httpDone', function(data){
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
这不输出任何东西.在断点处显示代码永远不会到达任何一个console.logs.我也尝试过:
aws.getObject(params).on('success', function(data){
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
但是,这也没有输出任何东西,并且放置一个断点表明console.log …
它似乎很简单,但我无法找到如何将一个Array填充整数转换为一个ArrayBuffer并重新转换为一个整数Array.有很多的例子,其中字符串转换为ArrayBuffer例如像在这里.
使用这些例子我创建了这个:
/**
* Convert string to array buffer.
*
* @param {Array.<int>} array
* @returns {ArrayBuffer}
*/
self.arrayToArrayBuffer = function( array ) {
var length = array.length;
var buffer = new ArrayBuffer( length * 2 );
var view = new Uint16Array(buffer);
for ( var i = 0; i < length; i++) {
view[i] = array[i];
}
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
然后阵列也需要再次转换回来.为此,我使用:
var array = new Uint16Array(arrayBuffer);
Run Code Online (Sandbox Code Playgroud)
这个解决方案似乎有效,但有没有更简单的方法呢?
它也适用于如下数组:
var …Run Code Online (Sandbox Code Playgroud) javascript ×3
arraybuffer ×2
amazon-s3 ×1
arrays ×1
aws-sdk ×1
base64 ×1
encoding ×1
node.js ×1