在Node.js中打开AWS调用的头

Unpack header from AWS call in Node.js

本文关键字:AWS 调用 Node js      更新时间:2023-09-26

我有一个完全可用的PHP项目。我正试图在Node.js中实现与该项目等效的功能。该项目依赖于从AWS中提取数据,然后从该数据中拆包一个标头。在PHP中,这是通过以下操作完成的:

$request = @self::$s3->getObject(self::$bucket, self::$filepath,false,0, self::HeaderSize+ 5 * self::ResolutionEntrySize + self::TileCountSize + 256 * self::TileEntrySize);
// Open the PAR file.
if( is_object($request) && ($request->code < 400)) {
    self::$modifiedTime = $request->headers['time'];
    // Read and unpack the header.
    self::$header = unpack('I*',  substr($request->body, 0, self::HeaderSize));
    self::$resolutionEntry = substr($request->body, self::HeaderSize, self::ResolutionEntrySize);
    self::$resolutionTable = substr($request->body, self::HeaderSize + 5 * self::ResolutionEntrySize, self::TileCountSize + 256 * self::TileEntrySize);
}

我不确定如何在Node.js中执行相同的操作。我尝试了以下操作:

aws.getObject(params, function(err, data){
    if(err == null){
        var objectData = data.Body.toString('utf-8'); 
        var sub = objectData.substring(0, 28); 
        var header = bufferpack.unpack('I*', sub);
       }
   }); 

在PHP中,header返回为一个数字数组,但在Node中,它表示它是null。我知道AWS调用正在工作,因为data返回如下:

{ 
  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  ... > }

我是否错误地使用了Bufferpack?

是的,Bufferpack使用不正确。Bufferpack接受一个缓冲区,而不是字符串,所以不应该传入sub,而应该传入data.Body。此外,*表示法无法识别,因此请使用所需的字节数,例如

var header = bufferpack.unpack('7I', data.Body);