我有一个简单的方法来检查*.mp3
本地计算机中的文件是否存在。\n它应该返回 status
响应的(200、404,403 等),但它不起作用。
fileExists(url){\n return this.http.get(url).timeout(2000)\n .map(res=>res.json())\n .subscribe(\n res=>{\n console.log("res is");\n console.log(res.status)\n return res.status;},\n err =>{ \n console.log("Error is");\n console.log(err.status); \n return err.status});\n\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n我为其设置了 2 秒的超时,但它只需要检查本地主机中的文件。因此,我认为,它有足够的时间来查找该文件。
\n\n它总是返回:
\n\nSubscriber {closed: false, syncErrorValue: null, syncErrorThrown: false, syncErrorThrowable: false, isStopped: false\xe2\x80\xa6}\n
Run Code Online (Sandbox Code Playgroud)\n
如果你想编写一个发出GET
请求状态代码的可观察对象,你可以这样做:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/map';
this.http.get("/some-file.txt")
.map((response) => response.status)
.catch((error) => Observable.of(error.status || 404))
.subscribe((status) => console.log(`status = ${status}`));
Run Code Online (Sandbox Code Playgroud)
如果您想更有效地根据 HTTP 状态代码确定文件是否存在,您可以使用该HEAD
方法,该方法不会检索文件的内容:
this.http.head("/some-file.txt")
.map((response) => response.status)
.catch((error) => Observable.of(error.status || 404))
.subscribe((status) => console.log(`status = ${status}`));
Run Code Online (Sandbox Code Playgroud)
您的问题中的代码的问题是您正在响应中查找 JSON 内容,并且正在查找status
该内容中的内容。这status
是在响应本身中。
但是,要实现确定文件存在的函数,您甚至不需要检查status
:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/mapTo';
import 'rxjs/add/operator/toPromise';
getFileStatus(path: string): Promise<boolean> {
return this.http.head(path)
.mapTo(true)
.catch((error) => Observable.of(false))
.toPromise();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8341 次 |
最近记录: |