我正在尝试制作简单的文件服务器.我有Node.js后端和MongoDB GridFS存储来存储文件.我是通过gridfs-stream从服务器获取文件的.在前端我使用Angular.我有两个主要问题:
>当我使用Blob提供下载时,文件名变为:“d1c393df-b0d9-4ae5-befe-8d45b183eb54 ……”.我阅读了很多关于它的文档,并没有找到任何解决方案.
>当我只通过Express进行下载而不进行身份验证时,文件会正确加载.但我通过Angular发送auth信息,没有它们应用程序将抛出错误.我可以指定路由而无需身份验证,但这使我的应用程序不安全.
我希望你能帮助我:
>找到另一种下载任何格式文件的方法.
>更改我现有的代码以使事情正常工作
我的Angular Service通过构造Blob来获取文件:
getFilesFactory.download = function(filename){ $http.get('/api/files/' + filename,{responseType:'arraybuffer'}) .then(function(data){ var stringCT = data.headers('Content-Type').toString(); console.log(stringCT); var contentType = stringCT.substring(1,stringCT.length - 1); console.log(contentType); switch (contentType) { case "image/jpeg": file = new Blob([data.data],{type: 'image/jpeg'}); fileURL = URL.createObjectURL(file); $window.open(fileURL); break; case "application/pdf": file = new Blob([data.data],{type: 'application/pdf'}); fileURL = URL.createObjectURL(file); $window.open(fileURL); break; case "application/msword": file = new Blob([data.data],{type: 'application/msword'}); fileURL = URL.createObjectURL(file); $window.open(fileURL); break; case "application/octet-stream": file = new Blob([data.data],{type: 'application/octet-stream'}); fileURL = URL.createObjectURL(file); $window.open(fileURL); break; default: console.log("no contentType match"); } }); };
解决方法
您不需要使用ajax下载文件并使用$window.open(fileURL);打开它.您可以使用’/ api / files /’文件名网址打开新窗口,浏览器将开始下载内容.您可以在服务器端控制Content-Type和文件名.您可以查看示例:
Nodejs send file in response
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。