如何从EX preSS下载XLSX在角 [英] How to download an xlsx in angular from express

查看:159
本文介绍了如何从EX preSS下载XLSX在角的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我生成的前preSS基于某些用户输入 XLSX 文件。该信息是通过要求提交的,我想通过返回文件的内容res.download(...)

如果我这样做,我得到了数据垃圾我的 AJAX 响应的领域。

我试着使用提示下载<一个href=\"http://stackoverflow.com/questions/16514509/how-do-you-serve-a-file-for-download-with-angularjs-or-javascript\">this解决方案,但内容仍然是垃圾。

这是我的角度控制器:


$ scope.generateSoldGoodsReport =功能(){
        reportService.generateSoldGoodsReport({
            开始日期:$ scope.startDate,
            结束日期:$ scope.endDate
        })
        。然后(函数(报告){
            VAR BLOB =新的Blob([报告] {类型:应用程序/ XLSX'});
            $ scope.url =(window.URL || window.webkitUR​​L).createObjectURL(BLOB);
        })
    }

和这里是我的服务:


generateSoldGoodsReport:功能(日期){
    VAR递延= $ q.defer()    $ http.post('/ API /安全/ generateSoldGoodsReport',日期)
                        。然后(功能(响应){
                            deferred.resolve(response.data)
                        })
        返回deferred.promise
    }

和这里是我的服务器端code:


sendFileResponse =功能(RES){
    返回功能(ERR,fileDetails){
        如果(ERR)
        {
             res.json({
                 错误:1,
                 消息:err.message,
                 详细:err.errors
             })
         }
         其他
         {
             res.download(fileDetails.path +/+ fileDetails.fileName)
         }
      }
 }


解决方案

在结束时,我结束了使用的解决方案,其中在要求我生成报告时响应被送到我做了一个 GET 请求到predefined地方储存生成报告的客户端。因为我用两个请求,而不是一个我不喜欢这种解决方案。

I am generating an xlsx file based on some user input in express. The info is submitted via a post request and I wanted to return the content of the file via res.download(...).

If I do that I get "garbage" in the data field of my ajax response.

I tried to prompt a download using this solution, but the content is still "garbage".

This is my angular controller:

$scope.generateSoldGoodsReport = function() {
        reportService.generateSoldGoodsReport({
            startDate: $scope.startDate,
            endDate: $scope.endDate
        })
        .then(function(report){
            var blob = new Blob([ report ], { type : 'application/xlsx' });
            $scope.url = (window.URL || window.webkitURL).createObjectURL( blob );
        })
    }

and here is my service:

generateSoldGoodsReport: function (dates) {
    var deferred = $q.defer()

    $http.post('/api/secure/generateSoldGoodsReport', dates)
                        .then(function(response){
                            deferred.resolve(response.data)
                        })
        return deferred.promise
    }

and here is my server side code:

sendFileResponse = function (res) {
    return function (err, fileDetails) {
        if (err)
        {
             res.json({
                 error: 1,
                 message: err.message,
                 detailed: err.errors
             })
         }
         else
         {
             res.download(fileDetails.path + '/' + fileDetails.fileName)
         }
      }
 }

解决方案

In the end I ended up using a solution where in a post request I generated the report and when the response was sent to the client I made a get request to a predefined place where the generated report was stored. I don't like this solution because I use two requests instead of one.

这篇关于如何从EX preSS下载XLSX在角的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆