我编写了使用 Angular $http 下载文件的代码。文件的名称是notURL 中指定。 URL 包含文件的唯一标识符,该标识符是从应用程序外部获取的。
When $http.get(myUrl)
被调用,一切正常;文件已被检索,我可以在回调处理程序中访问它,但我看不到如何获取文件的名称。使用 Fiddler 捕获原始响应,我看到:
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 54
Content-Type: application/octet-stream
Server: Microsoft-IIS/8.5
Access-Control-Allow-Origin: http://www.example.com/getFile/12345
Access-Control-Allow-Credentials: true
Content-Disposition: attachment; filename=testfile.txt
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 09 Oct 2015 20:25:49 GMT
Lorem ipsum dolar sit amet! The contents of my file!
从上面可以清楚地看出,服务器正在“Content-Disposition”中发回文件名,但我还没有找到在我的 Angular 回调中访问它的方法。如何从标题中获取文件名?
编辑以回应以下答案:我之前应该提到我已经尝试过了response.headers()
。它返回Object {content-type: "application/octet-stream", cache-control: "private"}
,所以由于某种原因我仍然没有得到 Content-Disposition 。response.headers('Content-Disposition')
回报null
.
可能值得一提的是,为了从 HTTP 标头中获取文件名,需要提取Content-Disposition
标题还不够。
您仍然需要获取filename
此标头值的属性。
返回标头值的示例:attachment; filename="myFileName.pdf"
.
下面的函数将提取filename="myFileName.pdf"
,然后提取"myFileName.pdf"
最后删除周围多余的引号以获得myFileName.pdf
.
您可以使用下面的代码片段:
function getFileNameFromHttpResponse(httpResponse) {
var contentDispositionHeader = httpResponse.headers('Content-Disposition');
var result = contentDispositionHeader.split(';')[1].trim().split('=')[1];
return result.replace(/"/g, '');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)