相关疑难解决方法(0)

检测浏览器何时收到文件下载

我有一个页面,允许用户下载动态生成的文件.生成需要很长时间,所以我想显示一个"等待"指标.问题是,我无法弄清楚如何检测浏览器何时收到文件,所以我可以隐藏指标.

我正在以隐藏的形式发出请求,该请求POST到服务器,并针对其结果定位隐藏的iframe.这样我就不会用结果替换整个浏览器窗口.我在iframe上监听"加载"事件,希望在下载完成后它会触发.

我在文件中返回"Content-Disposition:attachment"标题,这会导致浏览器显示"保存"对话框.但浏览器不会在iframe中触发"加载"事件.

我尝试过的一种方法是使用多部分响应.因此它会发送一个空的HTML文件,以及附加的可下载文件.例如:

Content-type: multipart/x-mixed-replace;boundary="abcde"

--abcde
Content-type: text/html

--abcde
Content-type: application/vnd.fdf
Content-Disposition: attachment; filename=foo.fdf

file-content
--abcde
Run Code Online (Sandbox Code Playgroud)

这适用于Firefox; 它接收空的HTML文件,触发"load"事件,然后显示可下载文件的"Save"对话框.但它在IE和Safari上失败了; IE触发"加载"事件但不下载文件,Safari下载文件(名称和内容类型错误),并且不会触发"加载"事件.

一种不同的方法可能是调用启动文件创建,然后轮询服务器直到它准备就绪,然后下载已经创建的文件.但我宁愿避免在服务器上创建临时文件.

有没有人有更好的主意?

javascript mime http

464
推荐指数
11
解决办法
28万
查看次数

如何使用 Angular Js 在新窗口中打开 Rest API Post 响应

我正在使用 Angular 进行休息 API 调用。我的 Rest API 如下所示:

@RequestMapping(value = "/getPDF/{projectId}", method = RequestMethod.POST)
    public ResponseEntity<byte[]> generateReport(@PathVariable("projectId") long projectId, @RequestBody Object vo, final HttpServletRequest request) {
        vo.setProjectId(projectId);
        byte[] pdf = blueprintService.generateBluePrint(vo);

        LOG.debug(new StringBuilder("Generating Blueprint for VO: ").append(vo).toString());
        String fileName = null;
        try {
            ProjectDetailsVO pdvo = projectSetupService.getProjectDetails(vo.getProjectId());
            fileName = new StringBuilder(pdvo.getClientName()).append("_")
                    .append(pdvo.getProjectName()).append("_")
                    .append(System.currentTimeMillis()).append(".pdf")
                    .toString();
        } catch (Exception e) {
        }

        if (fileName == null || fileName.trim().isEmpty())
            fileName = new StringBuilder("Project_")
                    .append(vo.getProjectId()).append("_")
                    .append(System.currentTimeMillis())
                    .append(".pdf").toString();

        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/pdf"); …
Run Code Online (Sandbox Code Playgroud)

rest web-services angularjs

5
推荐指数
0
解决办法
1675
查看次数

标签 统计

angularjs ×1

http ×1

javascript ×1

mime ×1

rest ×1

web-services ×1