zoukankan      html  css  js  c++  java
  • Struts2实现文件的上传和下载

    文件上传

    1.jsp页面

    <s:form action="fileAction" namespace="/file" method="POST" enctype="multipart/form-data"> 
    
        <!-- name为后台对应的参数名称 --> 
    
        <s:filename="files"label="file1"></s:file> 
    
        <s:filename="files"label="file2"></s:file> 
    
        <s:filename="files"label="file3"></s:file> 
    
        <s:submitvalue="提交"id="submitBut"></s:submit> 
    </s:form>

    2.Action

    //单个文件上传可以用 File files,String filesFileName,String filesContentType 
    //名称要与jsp中的name相同(三个变量都要生成get,set) 
    private File[] files; 
    // 要以File[]变量名开头 
    private String[] filesFileName; 
    // 要以File[]变量名开头 
    private String[] filesContentType; 
    
     
    private ServletContext servletContext; 
    
     
    //Action调用的上传文件方法 
    public String execute(){ 
    
          ServletContext servletContext =ServletActionContext.getServletContext(); 
    
          String dataDir = servletContext.getRealPath("/file/upload"); 
    
          System.out.println(dataDir); 
    
          for(int i =0; i < files.length; i++){ 
    
                File saveFile =newFile(dataDir, filesFileName[i]); 
    
                files[i].renameTo(saveFile); 
    
          } 
    
          return"success"; 
    }

    3.配置上传文件临时文件夹(在struts.xml中配置)

    <constantname="struts.multipart.saveDir"value="c:/temp"/>

    文件下载

    1.下载的url(到Action)

    <ahref="${pageContext.request.contextPath}/file/fileAction!down.action">下载</a>
    

    2.struts.xml配置

        <packagename="file" namespace="/file" extends="struts-default"> 
    
            <actionname="fileAction" class="com.struts2.file.FileAction">    
    
                <!-- 下载文件配置 --> 
    
                <!--type 为 stream 应用 StreamResult 处理--> 
    
                <resultname="down"type="stream"> 
    
                    <!-- 
    
                            不管实际类型,待下载文件 ContentType 统一指定为 application/octet-stream  
    
                            默认为 text/plain 
    
                    --> 
    
                    <paramname="contentType">application/octet-stream</param> 
    
                    <!--  
    
                            默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法,               
    
                            比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法  
    
                    -->              
    
                    <paramname="inputName">inputStream</param> 
    
                    <!--  
    
                            默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename 指定下载文  
    
                            件保有存时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名,               
    
                            这里使用的是动态文件名,${fileName}, 它将通过 Action 的 getFileName() 获得文件名  
    
                    -->              
    
                    <paramname="contentDisposition">attachment;filename="${fileName}"</param> 
    
                    <!-- 输出时缓冲区的大小 --> 
    
                    <paramname="bufferSize">4096</param> 
    
                </result>             
    
            </action> 
    
        </package>

    3.Action

    //Action调用的下载文件方法 
    
            public String down(){ 
    
                    return"down"; 
    
            } 
    
             
    
            //获得下载文件的内容,可以直接读入一个物理文件或从数据库中获取内容 
    
            public InputStream getInputStream()throwsException{ 
    
                    String dir = servletContext.getRealPath("/file/upload"); 
    
                    File file =new File(dir,"icon.png"); 
    
                    if(file.exists()){ 
    
                            //下载文件 
    
                            return new FileInputStream(file); 
    
                             
    
                            //和 Servlet 中不一样,这里我们不需对输出的中文转码为 ISO8859-1 
    
                            //将内容(Struts2 文件下载测试)直接写入文件,下载的文件名必须是文本(txt)类型 
    
                            //return new ByteArrayInputStream("Struts2 文件下载测试".getBytes()); 
    
                    } 
    
                    return null; 
    
            } 
    
     
    
            // 对于配置中的 ${fileName}, 获得下载保存时的文件名 
    
            public String getFileName(){ 
    
                    String fileName ="图标.png"; 
    
                    try{ 
    
                            // 中文文件名也是需要转码为 ISO8859-1,否则乱码 
    
                            return new String(fileName.getBytes(),"ISO8859-1"); 
    
                    }catch(UnsupportedEncodingException e){ 
    
                            return "icon.png"; 
    
                    } 
    
            }

     

    
    
  • 相关阅读:
    ActiveMQ基础教程JMS概述
    spring JMS在接收消息的时候总是报错
    java中实现同步的两种方式:syschronized和lock的区别和联系
    JMS之——ActiveMQ时抛出的错误Could not connect to broker URL-使用线程池解决高并发连接
    jQuery 实现 bootstrap 模态框 删除确认
    Jsp使用遍历List集合
    list里面放的实体对象,页面用c:foreach应该怎么取?
    如何停止处于stopping状态的windows服务(使用taskkill)
    Editplus配置Python的开发环境
    NAT对于网络上的其它人都不可见(但可以转发端口),Bridged和网络里的其它物理机没区别,Internal只能在虚拟机之间可见,Host-only只对主机可见(最符合我的服务器需求),最多可设置8块网卡实现混杂
  • 原文地址:https://www.cnblogs.com/xuanzai/p/2680601.html
Copyright © 2011-2022 走看看