用servlet进行文件的下载解决FF Cache和IE无法识别文件类型问题

本文探讨了直接通过URL链接下载文件存在的缓存问题及浏览器类型兼容性问题,并提出使用Servlet进行文件下载的方法,该方法能有效防止浏览器缓存文件并确保所有浏览器正确识别文件类型。

为什么要用sevlet进行文件下载,而不是直接把url放在直接anchor里面:

<a href="setup.exe">download</a>

 

使用上面的方法遇到两个问题:

1.如果用户已经下载过文件,firefox会cache文件,用户再次进行下载时,会从cache里面下载,这样用户可能永远无法拿到最新的安装文件了,除非他清除浏览器的cache

 

2.尝试在url里面加入时间戳:<a href="setup.exe?time=<%=System.currentTimeMillis()">download</a>

FireFox 中问题解决,但是出现了一个新的问题:ie点击下载后,居然是未知类型的setup文件。

 

只好用个servlet下载了,对应servlet加入时间戳:

<ahref='downloadSetupApp.do?time=<%=System.currentTimeMillis()%>

 

Java文件如下:


import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;


public class DownloadSetupAppAction extends BaseActionSupport {

    public static final Log sysLog = LogFactory
            .getLog(DownloadMiniAppAction.class);

    /**
     * **********************************************************************
     * This API is used to download the Setup.exe application.  Why need to
     * download the file using the servlet rather than directly add
     *  a link to the page:
     * 1.In FireFox, the file is always cached, thus the latest version
     * always download from the cache rather than from the site.  So the user
     * can not get the latest version when he has downloaded the applicaton
     *  before.
     *
     * 2.When add a time stamp to prevent cache by the browser, the IE can not
     * know the type of the application.  So user can not directly install it
     * directly
     *
     */
    public ActionForward execute(ActionMapping mapping, ActionForm actionForm,
            HttpServletRequest request, HttpServletResponse response) {
        String downloadPath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + request.getContextPath() + "/exe/setup.exe";
        response.setHeader("Pragma", "no-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0L);
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/force-download");

        OutputStream out = null;
        InputStream fileInputStream = null;
        try {
            String disHeader = "Attachment;Filename=\"setup.exe\"";
                   response.setHeader("Content-Disposition", disHeader);
                   out = response.getOutputStream();
            // transfer the file byte-by-byte to the response object
            URL url = new URL(downloadPath);
            URLConnection con = url.openConnection(); // *
            con.connect();
            fileInputStream = con.getInputStream();
            int i;
            while ((i = fileInputStream.read()) != -1) {
                out.write(i);
            }
        } catch (IOException e) {
            log.error(e, e);
        } catch(Exception e){
            log.error(e,e);
        }
        finally {
            try {
                if(fileInputStream!=null){
                    fileInputStream.close();
                }
                if(out!=null){
                    out.close();
                }
            } catch (IOException e) {
                log.error(e,e);
            }
        }
       
        return null;
    }

}

内容概要:本文围绕六自由度机械臂的人工神经网络(ANN)设计展开,重点研究了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程,并通过Matlab代码实现相关算法。文章结合理论推导与仿真实践,利用人工神经网络对复杂的非线性关系进行建模与逼近,提升机械臂运动控制的精度与效率。同时涵盖了路径规划中的RRT算法与B样条优化方法,形成从运动学到动力学再到轨迹优化的完整技术链条。; 适合人群:具备一定机器人学、自动控制理论基础,熟悉Matlab编程,从事智能控制、机器人控制、运动学六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)建模等相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握机械臂正/逆运动学的数学建模与ANN求解方法;②理解拉格朗日-欧拉法在动力学建模中的应用;③实现基于神经网络的动力学补偿与高精度轨迹跟踪控制;④结合RRT与B样条完成平滑路径规划与优化。; 阅读建议:建议读者结合Matlab代码动手实践,先从运动学建模入手,逐步深入动力学分析与神经网络训练,注重理论推导与仿真实验的结合,以充分理解机械臂控制系统的设计流程与优化策略。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值