欢迎使用CSDN-markdown编辑器

关于文件下载
1,文件下载可以直接通过简单的链接实现,但不能设置权限,也不能下载被保护的文件。
2,接下来我将使用struts2的文件下载,首先,要写一个下载页面,downloadFile.jsp,直接在地址栏传三个参数:

  <a href="D:\hardwork\照片\1.jpg">下载照片</a>
  <a href="D:\hardwork\照片\11.txt">下载文本</a>
  <a href="WEB-INF\2.jpg">在被保护的文件中</a>
  <a href="download?inputPath=D:\hardwork\照片\2.jpg&contentType=image/jpeg&downFileName=我的照片">下载</a>

接下来,再写FileDownloadAction.java文件,这个action方法需要提供一个返回InputStream的方法,该输入流代表了被下载文件的入口,且需要配置stream类型结果时指定inputName参数,inputName参数值就是方法去掉get前缀,首字母小写的字符串。

public class FileDownloadAction extends ActionSupport {
    //下载文件的资源路径
    private String inputPath;
    private String contentType;
    //下载文件的下载文件名
    private String downFileName;//和struts.xml文件中的参数相对应
    public String getInputPath() {
        return inputPath;
    }
    public void setInputPath(String inputPath) {
        this.inputPath = inputPath;     
    }
    public String getContentType() {
        return contentType;
    }
    public void setContentType(String contentType) {
        this.contentType = contentType;
    }
    public String getDownFileName() {
        return downFileName;
    }
    public void setDownFileName(String downFileName) {
        this.downFileName = downFileName
    }
    public InputStream getTargetFile() throws Exception{
        //return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
        FileInputStream fis=new FileInputStream(inputPath);
        return fis;
    }

}

最后就是要配置struts.xml文件了,在配置文件中使用OGNL表达式可以加引号,也可以不加。

<action name="download" class="nuc.sw.action.FileDownloadAction">
    <result name="success" type="stream">
       <!-- 指定下载文件的文件类型 -->
        <param name="contentType">${contentType}</param>
        <param name="inputName">targetFile</param>
        <!-- 指定下载文件的文件名 -->
        <param name="contentDisposition">filename="${downFileName}"</param>
        <!-- 指定下载文件的缓冲大小 -->
        <param name="bufferSize">4096</param>
      </result>

        </action>

如果按照上述操作,则会遇到如下问题:
(1)如果地址栏传参传的是英文状态下的,且是照片,则会直接将照片显示出来,不会出现下载的页面,要解决这个问题,则需要将struts.xml文件中的配置进行更改如下

<param name="contentDisposition">attachment;filename="${downFileName}"</param>

这里的attachment是指以附件的形式下载,这样就可以出现下载页了。
(2)如果文件名是中文,则保存的是乱码形式,这就需要将文件名和所在的资源路径进行转码,更改action文件如下所示:

public void setInputPath(String inputPath) throws UnsupportedEncodingException {
        this.inputPath=new String(inputPath.getBytes("iso-8859-1"),"utf-8");
    }
public void setDownFileName(String downFileName) throws UnsupportedEncodingException {
        this.downFileName = new String(downFileName.getBytes("iso-8859-1"),"utf-8");;
    }

这样就将下载页中的乱码进行解决
(3)但随之而来的不是乱码,这里写图片描述
这就要考虑是什么问题造成的,回溯到downFileName,在struts.xml文件中要获取filename=${downFileName},这里的downFileName是从action中的getDownFileName() 所获取到的,所以需要对这个这个方法获取的值进行转码,如下所示:

public String getDownFileName() throws UnsupportedEncodingException {
        return URLEncoder.encode(downFileName,"utf-8");
    }

对于 URLEncoder这里有相关的介绍
https://my.oschina.net/zimingforever/blog/63719
这样文件下载就做好了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值