我正在尝试从我的mongo DB下载文件。 一旦我开始下载,我可以看到在chrome dev工具的网络选项卡中正在下载文件。一旦完成,它就会下载到本地驱动器。我真的不知道如何跳过这个并直接下载到本地驱动器。
这对用户体验不利,因为文件很大,似乎没有任何反应。
服务器端:
app.get('/download/single',function(req,res){
gfs.findOne({ _id: req.query.targetFile}, function(err,file){
if (err) {
return res.status(400).send(err);
}
else if (!file) {
return res.status(404).send('Error on the database looking for the file.');
}
else{
res.set('Content-Type', "application/vnd.android.package-archive")
var readstream = gfs.createReadStream({
_id: req.query.targetFile,
})
readstream.pipe(res)
readstream.on('end',function(){
res.end()
})
}
})
})
客户端:
app.service('Download',function($http){
this.single = function(id){
return $http({
method: 'GET',
url: '/download/single',
params: {
targetFile: id
},
transformResponse: [function (data) {
return data;
}]
}).success(function(response){
return response
})
}
})
app.controller('downloadCtrl',function($scope,$routeParams,$window,Download){
Download.single($routeParams.id).success(function(data){
if(data){
var blob = new Blob([data], {
type: "application/vnd.android.package-archive"
})
saveAs(blob,'test.apk',true)
}
})
})
答案 0 :(得分:0)
我的建议是将一大堆代码放在一个函数中,该函数在你选择的事件中是callend
$scope.showLoader = false;
$scope.onSomeButtonClick = function() {
$scope.showLoader = true;
Download.single($routeParams.id).success(function(data){
$scope.showloader = false;
if(data){
var blob = new Blob([data], {
type: "application/vnd.android.package-archive"
})
saveAs(blob,'test.apk',true)
}
})
}
在您的情况下发生了什么,控制器被初始化,并开始执行其代码。您想要做什么只初始化您希望开始下载的事件监听器。
希望这会有所帮助。欢呼声