我编写了使用Angular $http的代码下载文件.该文件的名称未在URL中指定. URL包含文件的唯一标识符,该标识符是从应用程序外部获取的.
当$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属性.
您仍然需要从此头值获取filename属性.
返回的头值示例:attachment;文件名= “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,''); }