Javascript 通过ajax-angularJS从本地目录解析gz文件中的json
我试图使用angularJS的$http服务读取data.gz中的json。但我只得到奇怪的符号和字符作为回应。我目前正在nodeJS服务器上本地运行该应用程序。我是不是遗漏了什么Javascript 通过ajax-angularJS从本地目录解析gz文件中的json,javascript,angularjs,ajax,gzip,Javascript,Angularjs,Ajax,Gzip,我试图使用angularJS的$http服务读取data.gz中的json。但我只得到奇怪的符号和字符作为回应。我目前正在nodeJS服务器上本地运行该应用程序。我是不是遗漏了什么 $http({ url: 'systemRes.10.gz', method: 'GET' }) .then(function successCallback(response) { console.log(response.data); //shows strange characters });
$http({
url: 'systemRes.10.gz',
method: 'GET'
})
.then(function successCallback(response) {
console.log(response.data); //shows strange characters
});
由于文件位于本地目录中,因此将头设置为以下会导致错误:拒绝设置不安全的头“接受编码”
尝试访问本地gz文件不会提供
内容编码
头,这是浏览器解压缩文件所必需的
这一点在之前的帖子中得到了证实->
如果需要在生产中使用js文件,您应该尝试使用合适的文件服务器(如nginx或apache)来提供文件。
否则,如果是一次性脚本,你应该考虑使用,它提供了<代码> -g>代码>选项,为文件的GZIP版本提供服务。例如,如果您的文件是systemRes.10.json.gz
,则通过在文件夹中启动httpserver
,使用
$ npm i http-server
$ node_modules/.bin/http-server -g
您可以编写以下js脚本(使用fetch,但是$http行为应该相同)
我对它进行了测试,它提供了
内容编码
标题,因此您应该能够很好地进行测试。控制台方法中是否有类似的错误?@SachilaRanawaka noerrors@JordanQuagliatini有点但没有errors@haribalaji,根据我链接的答案,如果您试图访问本地文件,您将缺少内容编码
标题,这将阻止浏览器解压缩文件。实际上,我试图在Chrome上使用获取,但它阻止了我这么做。解决方案可能来自为您的文件提供服务并提供文件头。我尝试过,但服务器仍然不提供内容编码头。但是它提供了内容类型:application/gzip。如果您试图直接获取gz文件,它确实提供了内容类型:application/gzip
,但是如果您不获取gz文件,而是获取没有gz的文件名(如我的回答中所述),那么它应该可以工作。即尝试fetch('http://localhost:8080/filename)
而不是fetch('http://localhost:8080/filename.gz“)
,http服务器的-g
选项处理@Jordan运行的it。如果存档名称和其中存在的文件不同怎么办?假设systemRes.10.gz包含data.json。浏览器不关心文件的原始名称,只关心对其重要的数据。如果gz文件包含格式良好的JSON数据,那么使用JSON.parse
或response.JSON
将使您能够完全访问JSON数据。通常,现代web服务器gzip会在将内容发送到客户端之前自动生成内容,您不必手动完成,这就是为什么您不能用JS解压文件的原因。这很有意义@乔丹·夸利亚蒂尼
$ npm i http-server
$ node_modules/.bin/http-server -g
fetch('http://localhost:8080/systemRes.10.json')
.then(resp => resp.json())
.then(json => console.log(json))
.catch(e => console.error(e))