使用struts2和Ajax下载文件时如何放置进度栏

纳伦德拉·库玛(Narendra Kumar)

我无法放置进度栏,因为它直接重定向页面并下载了文件。

安德里亚·利吉奥斯(Andrea Ligios)

一个问题中有这么多的问题(大多数都是隐性的)!

使用struts2和Ajax下载文件时如何放置进度栏

  1. 如果不需要,请不要使用AJAX下载。在浏览器(contentDisposition: inline)中打开文件时,只需使用新的Tab(/ Window)。当您下载文件(contentDisposition: attachment)时,当前页面不会受到影响。您可以在此答案中找到几种方法来执行此操作,例如:

    <s:url action="downloadAction.action" var="url">
        <s:param name="param1">value1</s:param>
    </s:url>
    <s:a href="%{url}" >download</s:a>
    

如何放置浏览器进度条?

  1. 每个浏览器都有一个内置的进度条,下载文件时会显示该进度条:

    在此处输入图片说明

    仅在未提供要下载文件的长度的情况下,浏览器才能绘制进度条。要指示浏览器,您可以使用contentLength标题,标题也可以直接在Stream结果中使用:

    <result name="success" type="stream">    
        <param name="contentType">image/jpeg</param>
        <param name="contentDisposition">attachment;filename="document.pdf"</param>
        <param name="contentLength">${lengthOfMyFile}</param>
    </result>
    
    private long lengthOfMyFile; // with Getter
    
    public String execute(){
        /* file loading and stuff ... */
        lengthOfMyFile = myFile.length();
        return SUCCESS;
    }
    

假设文件太重。所以这需要时间,所以我想防止用户不要单击其他按钮

  1. 如果要节省带宽,则需要进行Web服务器配置。本文可能会有所帮助:

    相反,如果您不关心阻止泛滥的请求,而只是防止客户端进行多个并发下载,则可以使用会话变量,将其放在方法的开头并在方法的末尾删除,并在方法的开头检查其是否存在。您的下载操作。如果存在,则不会下载,否则,您将:

    // The Action must implement the SessionAware interface
    
    private Map<String,Object> session; // with Setter
    private final static String BUSY = "I'm busy. Try again";
    
    public String execute(){
        if (session.get(BUSY)!=null){
           LOG.debug("Another download is in progress. I stop here");
           return NONE;
        }
        try {
            session.put(BUSY,BUSY);
            /* file loading and stuff ... */
        } finally {
            session.remove(BUSY);
            return SUCCESS;
        }
    }
    

    好旧的信号量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在提示下使用Struts2下载文件

来自分类Dev

下载文件时我无法更新进度栏

来自分类Dev

通过Android Retrofit 2下载文件时是否可以显示进度栏

来自分类Dev

使用asynctask下载文件并显示进度栏

来自分类Dev

进度栏,用于使用JavaScript / jQuery下载文件

来自分类Dev

使用<iframe>和AJAX下载文件时出现404

来自分类Dev

使用Ajax和iframe下载文件

来自分类Dev

在Codeigniter中上传文件时如何放置进度栏

来自分类Dev

上载文件时显示进度栏

来自分类Dev

上载文件时如何将“进度”和更新事件绑定到ajax请求

来自分类Dev

以非英语语言显示文件名,以供Struts2动态下载文件

来自分类Dev

通过带有请求的HTTP下载文件时的进度栏

来自分类Dev

Android-下载文件时,水平进度栏不起作用

来自分类Dev

如何使用Struts2上传文件?

来自分类Dev

Android-通过更新进度栏下载文件

来自分类Dev

在Struts 2中下载文件

来自分类Dev

在Struts 2中下载文件

来自分类Dev

从Google云端硬盘下载文件时的下载进度状态?

来自分类Dev

Struts2中的文件下载问题

来自分类Dev

使用Guzzle和Ajax从Dropbox下载文件

来自分类Dev

如何更新下载文件的通知栏?

来自分类Dev

使用 JSF 和 Primefaces 下载文件时出错

来自分类Dev

下载文件时使用swing GUI使进度条显示

来自分类Dev

下载文件时使用swing GUI显示进度条

来自分类Dev

如何使用laravel响应以ajax成功下载文件

来自分类Dev

进度栏加载文件

来自分类Dev

用ajax和php下载文件

来自分类Dev

使用Wininet下载文件时如何避免冻结

来自分类Dev

网址不变时如何使用python下载文件