我试图制作简单的文件服务器。我有Node.js后端和MongoDB GridFS存储来存储文件。我是通过gridfs-stream
从服务器获取文件的。在前端我使用Angular。我有两个主要问题:
filename
变为:" d1c393df-b0d9-4ae5-befe-8d45b183eb54 ......"类。我阅读了很多关于它的文档,并没有找到任何解决方案。我希望你帮助我:
My 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");
}
});
};
答案 0 :(得分:0)
您无需使用ajax
下载文件并使用$window.open(fileURL);
打开文件。您可以使用'/api/files/' + filename
网址打开新窗口,浏览器将开始下载内容。您可以在服务器端控制Content-Type
和文件名。您可以查看示例:Nodejs send file in response