当前位置: 首页 > 知识库问答 >
问题:

当AngularJS$Resource响应作为带有文件名的附件接收时,如何触发旋转器进行文件下载或如何在浏览器中下载文件

梁兴文
2023-03-14

我可以在AngularJS控制器中使用下面一行代码成功下载。

$window.location.href =$rootScope.urlBase+'/dios/download/lineitemexcel/'+$routeParams.id

但是,当数据很大并且需要更长的时间时,因此我需要启用角旋转器。没有办法,我可以找到一种方法,启动旋转之前的调用,它应该完成后,文件下载完成在浏览器。

根本问题:我如何能在项目中的现有插件中启用spinner,angular-spinner或USSpinnerService?如果这有一个解决方案,我没有下一个问题。

factory('Dios', ['$resource','$rootScope',
        function($resource, $rootScope){
            return $resource($rootScope.urlBase+'/dios/:id/:status/:third/:fourth/:fifth/:pageNo', {}, {
                get: {
                    method: 'GET'
                },
                update: {
                    method: 'PUT'
                },
                getexcel: {
                    method: 'GET',
                    transformResponse: function(data, headers,status){
                        var dataTransformed = {};
                        dataTransformed.data=data;
                        dataTransformed.headers=headers;
                        dataTransformed.status=status;
                        return dataTransformed;
                    }
                }
            });
        }])
Dios.getexcel({dios:'dios',third:'download',fourth:'lineitemexcel',fifth: $routeParams.id},function(data){
                console.log(data);
]);

X-content-type-options:nosniff

X-XSS-保护:1;模式=块

cache-control:no-cache,no-store,max-age=0,must-revalidate

access-control-expose-headers:1、Access-Control-Allow-Origin、access-control-allow-credential

内容-处置:依附;文件名=lineItems-of_io-1553-8531testing_2018-09-18.xlsx

内容-类型:application/vnd.ms-excel

使用TransformResponse:时,我需要responseheaders信息,但它没有附加到TransformResponse:中的头。

因此,请帮助我为window.location.href=url触发旋转器,或者帮助我如何通过$resource下载接收到的数据。

共有1个答案

乌甫
2023-03-14

首先这个问题与angularjs本身无关,这是纯粹的js问题。下载有两个选项:

  1. 使用Ajax下载文件,然后使用createobjecturl将其存储在磁盘上。
  2. 下载文件的常用方法,即简单href

这两个真的是不同的:-1号在某些浏览器中不能工作-1号给你完全访问请求,你可以舒适地处理错误等-2号开始并行下载,例如在chrome中你可以关闭应用程序的标签,但下载仍然会继续

    null
 类似资料:
  • 问题内容: 我有一个页面,允许用户下载动态生成的文件。生成需要很长时间,因此我想显示一个“等待”指示器。问题是,我不知道如何检测浏览器何时收到文件,因此可以隐藏指示器。 我正在以隐藏的形式发出请求,该请求会发布到服务器,并以隐藏的iframe作为结果。这样一来,我就不会用结果替换整个浏览器窗口。我在iframe上侦听“加载”事件,希望下载完成后将触发该事件。 我随文件返回一个“ Content-D

  • 问题内容: 一切正常,但是只有当文件很小(大约1MB)时,当我尝试使用更大的文件(例如20MB)时,我的浏览器将其显示,而不是强制下载,到目前为止,我尝试了许多标头,现在我的代码看起来像: 问题答案: 在将文件内容写入输出流之后,你将设置响应头。在响应生命周期中设置标头很晚。正确的操作顺序应该是首先设置头,然后将文件的内容写入servlet的输出流。 因此,你的方法应编写如下(由于仅是表示形式,因

  • 问题内容: 我的代码从远程URL获取文件并在浏览器中下载文件: 代码:http://play.golang.org/p/x-EyR2zFjv 可以获取文件,但是如何在浏览器中下载文件? 问题答案: 要使浏览器打开下载对话框,请在响应中添加和标头: 在将内容发送到客户端之前,请执行此操作。您可能还希望将响应的标头复制到客户端,以显示适当的进度。 要将响应主体流传输到客户端而不将其完全加载到内存中(对

  • 问题内容: 这是其中的代码 返回的响应是一个文件。我希望用户能够将其保存为文件,但是什么也没有发生。我认为服务器返回的响应类型正确,因为在控制台中它说 我想念的是什么?我应该在减速器中做什么? 问题答案: 浏览器技术当前不支持直接从Ajax请求下载文件。解决方法是添加一个隐藏的表单并将其提交到幕后,以使浏览器触发“保存”对话框。 我正在运行标准的Flux实现,因此不确定确切的Redux(Reduc

  • 问题内容: 我有以下代码,可让用户下载csv文件中的数据字符串。 如果客户端运行代码,它将生成空白页并开始下载csv文件中的数据,效果很好。 所以我试图用JSON对象来做到这一点 但是我只看到一个页面,上面显示了JSON数据,没有下载它。 我进行了一些研究,并且该研究声称可以工作,但是我的代码没有任何区别。 我在代码中缺少什么吗? 问题答案: 这是我为应用程序解决的方式: HTML: JS(纯JS

  • 我正在使用AngularJS和Spring编写应用程序。我想向服务器发送请求,并下载控制器返回的响应作为文件。在控制器中,我有csv文件的内容(作为字符串),即<代码>1;2.3.4(1行4列)。将此响应下载为文件的最简单方法是什么? 下面,我发布了我的简化代码。Spring控制器: 在javascript中(AngularJS) 我还试图写入响应流(如下所示),设置标题,但在客户端,我总是以字符