下载到浏览器后,可见下载到光盘完成

时间:2017-01-13 15:10:02

标签: javascript angularjs mongodb file express

我正在尝试从我的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)
            }
        })
    })

1 个答案:

答案 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)
    }
  })
}

在您的情况下发生了什么,控制器被初始化,并开始执行其代码。您想要做什么只初始化您希望开始下载的事件监听器。

希望这会有所帮助。欢呼声