1

Meteor アプリケーションのバグで立ち往生しています。私がやろうとしているのは、github からリリース アセット ファイルを取得し、それを解凍することです。標準ブラウザからダウンロードできました。

Meteor リクエストの結果にはバッファが含まれており、必要に応じてバイナリに保存できますが、ブラウザから取得したバイナリとは異なります (各ファイルの 16 進コードとサイズを比較しました異なります)。

Meteor (Windows zip プログラムまたは JSZip) からダウンロードしたアーカイブ ファイルを開こうとすると、ファイルが破損していると表示されます。

ファイルのダウンロードに使用したコードは次のとおりです。

HTTP.call('GET',asset.url,{ // asset.url is a valid one
    params:{
        'access_token':token
    },
    headers: {
        'Accept':"application/octet-stream",
        'User-Agent':"My app",
    }
},function( error, result ) {
    if(error)console.log(error);
    else{
        console.log('file downloaded !');
        var app_archive = new JSZip(); // I'm using JSZip for decompressing the stream
        app_archive.load(new Buffer(result)); // fail here
        package_file = app_archive.file('package.json');
        console.log(package_file);
    }
});

Meteor コンソールの出力は次のとおりです。

=> Meteor server restarted
I20160313-16:56:43.975(-5)? file created !
I20160313-16:56:44.105(-5)? Exception in callback of async function: Error: Corr
upted zip : can't find end of central directory
I20160313-16:56:44.106(-5)?     at Object.ZipEntries.readEndOfCentral (C:\Users\
jimmy\AppData\Local\.meteor\packages\udondan_jszip\2.4.0_1\npm\node_modules\jszi
p\lib\zipEntries.js:135:19)
I20160313-16:56:44.108(-5)?     at Object.ZipEntries.load (C:\Users\jimmy\AppDat
a\Local\.meteor\packages\udondan_jszip\2.4.0_1\npm\node_modules\jszip\lib\zipEnt
ries.js:197:14)
I20160313-16:56:44.114(-5)?     at Object.ZipEntries (C:\Users\jimmy\AppData\Loc
al\.meteor\packages\udondan_jszip\2.4.0_1\npm\node_modules\jszip\lib\zipEntries.
js:21:14)
I20160313-16:56:44.116(-5)?     at Object.module.exports [as load] (C:\Users\jim
my\AppData\Local\.meteor\packages\udondan_jszip\2.4.0_1\npm\node_modules\jszip\l
ib\load.js:11:18)
I20160313-16:56:44.117(-5)?     at server/FabMo-App-Store.js:122:19
I20160313-16:56:44.119(-5)?     at runWithEnvironment (packages/meteor/dynamics_
nodejs.js:110:1)

エンコードの問題に関連している可能性があると思いますが、ほとんどすべてのエンコード形式を試しましたが、成功しませんでした。私はどんな提案にもオープンです。

4

2 に答える 2

0

そうです、これはエンコードの問題です。ドキュメントから、結果として HTTP 応答の本文を文字列として取得します。コンテンツを文字列として取得するには、ユーザー/ブラウザー/フレームワークは、エンコード (通常は UTF8) を使用してバイナリ形式からデコードする必要があります。バイナリファイルを取得しようとすると、「デコード」すると破損します。

結果をバイナリ形式で取得する必要があります。問題#1670は有望に見えましたが、マージされませんでした。を使用してmeteor add http aldeed:http、私は得る

HTTP.call('GET',asset.url,{
  params:{
    responseType: "arraybuffer"
    // ...
  },
  // ...
},function( error, result ) {
    var app_archive = new JSZip();
    app_archive.load(result); // result is an ArrayBuffer
});
于 2016-03-14T18:44:36.747 に答える