2016-04-29 24 views
0

我在PHP中有一個完全可用的項目。我正在嘗試使Node.js中的該項目等價。該項目依賴於從AWS提取數據,然後從該數據中解壓縮標題。在PHP中,這是通過以下方式完成的:從Node.js的AWS調用中解壓縮頭文件

$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回來爲數字陣列,然而在節點跟它是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不正確?

回答

0

是的,Bufferpack被錯誤地使用。 Bufferpack接受緩衝區,而不是字符串,因此不要傳入sub,而應該通過data.Body。此外,*表示法不被識別,因此改爲使用您想要的字節數,如

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