2017-09-18 3 views
0

私は、angularJSの$ httpサービスを使用してdata.gzに存在するjsonを読み込もうとしています。しかし、私は応答として奇妙な記号や文字を取得します。私は現在、アプリケーションをnodeJSサーバーでローカルに実行しています。私はここに何かを逃していますか?ローカルディレクトリからajax-angularJSを介してgzファイルのjsonを解析する

$http({ 
    url: 'systemRes.10.gz', 
    method: 'GET' 
}) 
.then(function successCallback(response) { 
    console.log(response.data); //shows strange characters 
}); 

Click to view the strange characters.

ファイルがローカルディレクトリにあるので、以下にヘッダを設定すると、エラーが発生:は、安全でないヘッダを設定する拒否「同意エンコード」

headers: { 'Accept-Encoding': 'gzip' } 
+0

コンソールのエラー –

+0

https://stackoverflow.com/questions/32463340/angular-gunzip-json-file-automatically-refused-to-set-unsafe-header-accept-enに似たようなものがありますか? –

+0

@Sachilaラナワカのエラー –

答えて

0

ローカルのgzファイルにアクセスしようとすると、ブラウザがファイルを解凍するために必須のContent-Encodingヘッダーは提供されません。

これは、この前の投稿によって確認された - >Angular gunzip json file automatically : Refused to set unsafe header "Accept-Encoding"

あなたは生産にあなたのjsファイルを使用する必要がある場合は、nginxのか、Apacheのような適切なファイルサーバーを使用してファイルを提供しようとする必要があります。 また、1回限りのスクリプトの場合は、-gオプションを提供するhttp-serverを使用して、gzippedバージョンのファイルを提供することを検討する必要があります。たとえば、あなたのファイルが

$ npm i http-server 
$ node_modules/.bin/http-server -g 

あなたがjsの次のスクリプトを書くことができて、あなたのフォルダにhttp-serverを起動し、その後systemRes.10.json.gzであれば(フェッチではなく、$は、http挙動が同一である必要があります)

fetch('http://localhost:8080/systemRes.10.json') 
    .then(resp => resp.json()) 
    .then(json => console.log(json)) 
    .catch(e => console.error(e)) 

Iそれをテストし、Content-Encodingヘッダーを提供するので、あなたはあなたのテストに適しているはずです。

+0

私はそれを試みましたが、サーバーはまだContent-encodingヘッダーを提供しません。それはcontent-type:application/gzipを提供します。 –

+0

gzファイルを直接取得しようとすると、実際に 'Content-Type:application/gzip'が提供されますが、gzファイルを取得するのではなく、gzを使わないでファイルの名前を取得するとそれは動作するはずです。 'fetch( 'http:// localhost:8080/filename.gz')'の代わりに 'fetch( 'http:// localhost:8080/filename')'を試してください。 'http-サーバーはそれを処理する –

+0

それは@ジョーダンを働いた。アーカイブ名とファイルが異なる場合はどうなりますか? systemRes.10.gzにはdata.jsonが含まれているとします。 –

関連する問題