`

007 - 文件上传

阅读更多

1.文件上传

 //FileUpLoadAction .java

public class FileUpLoadAction {


 private File image;                //取得文件
 private String imageFileName;      //取得文件名
 private String imageContentType;   //取得文件类型
 
 
 private File[] images;                //取得多个文件
 private String[] imagesFileName;      //取得多个文件名
 private String[] imagesContentType;   //取得多个文件类型
 
 public String executeSimple() throws Exception{  //上传单个文件
  

   String realpath = ServletActionContext.getServletContext().getRealPath("/images");
   System.out.println(realpath);
   if(image!=null){

     File savefile = new File(new File(realpath), imageFileName);
     if(!savefile.getParentFile().exists()) savefile.getParentFile().mkdirs();
     FileUtils.copyFile(image, savefile);
     ActionContext.getContext().put("message", "上传成功");

   }
   return "success";


 }
 
 public String executeMutiple() throws Exception{        //上传多个文件
  

   String realpath = ServletActionContext.getServletContext().getRealPath("/images");
   System.out.println(realpath);
   if(image!=null){
         File savedir = new File(realpath);
         if(!savedir.exists()){
              savedir.mkdirs();
         }
     
     for(int i = 0 ; i<image.length ; i++){    
            File savefile = new File(savedir, imageFileName[i]);
            FileUtils.copyFile(image[i], savefile);
     }
     ActionContext.getContext().put("message", "上传成功");
   }
   return "success";


 }
 
 .....//getters and setters
 


}

//上传单个文件表单
    <form action="upload_executeSimple" enctype="multipart/form-data" method="post">
            文件:<input type="file" name="image"><br/>
           <input type="submit" value="上传"/>
    </form>
   
   
//上传多个文件表单,   注意enctype="multipart/form-data"
    <form action="upload_executeMutiple" enctype="multipart/form-data" method="post">
           文件1:<input type="file" name="images"><br/>
           文件2:<input type="file" name="images"><br/>
           文件3:<input type="file" name="images"><br/>
           <input type="submit" value="上传"/>
    </form>

 

//struts.xml
<struts>
     <constant name="struts.enable.DynamicMethodInvocation" value="true"/>
     <constant name="struts.multipart.maxSize" value="10701096"/>
     
     <package name="upload" namespace="/" extends="struts-default">
            <action name="upload_*" class="FileUpLoadAction" method="{1}">
                   <result name="success">/WEB-INF/page/message.jsp</result>
            </action>
      </package>
</struts>


 

2. 文件下载

 

 

public class DownloadAction extends ActionSupport {

        private String fileName; 
     
        public void setFileName() {         


               String tempFileName = ServletActionContext.getRequest().getParameter("name");
               try { 
                      // 对tempFileName进行UTF-8解码

                      // 这里使用request.setCharacterEncoding解码无效.  
                      // 只有解码了getDownloadFile()方法才能在下载目录下正确找到请求的文件  
                     tempFileName = new String(tempFileName .getBytes("ISO-8859-1"), "UTF-8"); 
                } catch (Exception e) { 
                      e.printStackTrace();
                }
                 this.fileName = tempFileName ; 
         }

 

 


     //此方法对应的是struts.xml文件中的:  
     // <param name="contentDisposition">attachment;filename="${fileName}"</param>  
     // 这个属性设置的是下载工具下载文件时显示的文件名,  
     // 要想正确的显示中文文件名,我们需要对fileName再次编码  
     //否则中文名文件将出现乱码,或无法下载的情况
     

     public String getFileName() throws UnsupportedEncodingException {

            fileName=new String(fileName.getBytes(),"ISO-8859-1"); 

            return fileName;
     }

    

 


     //此方法对应的是struts.xml文件中的:  
     // <param name="inputName">downloadFile</param>  
     //返回下载文件的流,可以参看struts2的源码  
      public InputStream getDownloadFile() {

             this.setFileName(); 
             return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
    }

   


    public String execute() throws Exception {
            return SUCCESS;
    }
}

 

 

 

struts.xml  其中的EL表达式,是要注意的

        <action name="download" class="com.test.action.DownloadAction">
            <result name="success" type="stream">
                <param name="contentDisposition">attachment;filename="${fileName}"</param> 
                <param name="inputName">downloadFile</param> 

                <!--对应DownloadAction.getDownloadFile()-->
            </result>
        </action>

 


 

分享到:
评论

相关推荐

    开源项目-aldor007-mort.zip

    "aldor007-mort"提供了文件存储功能,支持上传、下载和管理文件。这可能涉及到HTTP上传、文件元数据管理、存储策略(如分布式存储、冗余备份)等技术。通过源代码,我们可以学习如何使用Go语言的`net/http`包来构建...

    PyPI 官网下载 | OneNeuron_pypi-Soumyadipta007-0.0.2.tar.gz

    "OneNeuron_pypi-Soumyadipta007-0.0.2.tar.gz"是PyPI上的一个特定软件包,由Soumyadipta007开发,版本号为0.0.2,格式为tar.gz压缩文件。 描述部分明确了这个资源是从PyPI官方获取的,全名即为压缩包的文件名,...

    AP5030DN-S-FAT-V200R007

    对于AP5030DN-S,用户需下载名为“AP5030DN-S-FAT-V200R007C20SPC300”的压缩包,内含所需的所有更新文件。在升级前,确保AP处于安全的关机状态,然后通过管理界面或者TFTP服务器将固件上传至设备。遵循正确的升级...

    gijoe007-github.io

    GitHub.io域名是GitHub为用户提供的一种免费静态网页托管服务,用户可以通过上传HTML、CSS和JavaScript文件来构建自己的网站。 【描述】:"gijoe007-github.io" 的描述并未提供具体信息,可能是因为这个站点没有...

    Django 教程中的多个文件上传

    在本教程中,您可以学习 迭代请求文件 和 上传多个文件 一次使用 Django 在 Python 中。本教程旨在为学生和初学者提供学习开发动态网站的参考 姜戈.在这里,我将提供一些步骤来创建一个简单的 Web 应用程序,该应用...

    文件上传js css

    在网页开发中,文件上传是一项常见且重要的功能。"文件上传js css" 指的是使用JavaScript和CSS技术实现文件上传的交互与样式设计。在这个主题中,我们将深入探讨JavaScript和CSS在文件上传中的应用,以及如何通过...

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签

    在这个项目中,SSH2框架与Ajax技术结合,实现了一个带进度条的文件上传功能,并且这个功能已经被封装成了自定义标签,方便在页面上直接使用。 首先,让我们深入理解SSH框架的每个组件: 1. **Struts2**:Struts2是...

    文件上传与下载模块

    文件上传与下载模块是Web应用中的重要组成部分,它允许用户在服务器上存储和获取文件,这对于数据共享、信息交流和在线服务来说至关重要。本模块主要基于JSP(Java Server Pages)技术实现,JSP是一种动态网页开发...

    AP5030DN-S-FAT-V200R007C20SPC300 及升级工具.zip

    3. **设置TFTP服务器**:启动3CDaemon,设置好TFTP服务器,将固件文件上传至服务器根目录,便于AP访问。 4. **连接AP**:使用Putty通过SSH连接到AP5030DN-S,确保你知道设备的IP地址,登录用户名和密码。 5. **...

    音乐DJ网站系统源代码--007

    总的来说,音乐DJ网站系统源代码--007是一个集音乐播放、社区互动、内容管理于一体的平台,其技术栈包括ASP开发、数据库管理、音频流媒体、用户账户系统、文件上传和推荐算法等多个方面。开发者在使用或学习此系统时...

    TP007-RTC控制LED灯翻转.zip

    在本项目"TP007-RTC控制LED灯翻转.zip"中,我们涉及的是一个基于微控制器(可能为Pyboard或类似的开发板)的实时钟(RTC)应用,通过RTC来控制LED灯的翻转效果。这个项目是学习嵌入式系统、硬件交互以及基础编程的一...

    华为无线AP AP3030DN-FAT-V200R007C20SPC700

    用户应按照升级指南的步骤,将AP设备设置为升级模式,然后通过网络或本地连接上传固件文件,完成升级过程。升级前务必备份现有配置,以防意外情况发生。 总的来说,华为AP3030DN-FAT-V200R007C20SPC700是一款适用于...

    Android 多线程可断点续传上传文件至服务器Demo

    Android 多线程可断点续传上传文件至服务器Demo(Android端编辑器:Android Studio,服务器端编辑器:Eclipse,请注意手机默认下载目录必须要有t007.zip,服务器端必须有D:\temp\temp目录)

    FLEX带进度指示的文件上传

    博文链接:https://tj007-bo.iteye.com/blog/128181

    Rails里给文件上传添加progress_bar

    在Ruby on Rails(Rails)框架中,为文件上传添加进度条功能可以显著提升用户体验,让用户在上传大文件时能够清楚地看到进度,增加交互性。本文将深入探讨如何在Rails应用中实现这一功能。 首先,我们需要理解文件...

    博客系统源代码--007

    修正327补丁导致doc文件不能上传的BUG 3: 修正UBB编辑器模式下发布的相册不能以相册模式显示的BUG 4: 整站加密后相片不在整站中显示 5: 修正日志不允许回复时仍能被恶意回复的BUG 6: 修正摘要中的图片的绝对路径...

    AP3010DN-V2-FAT_V200R007C10SPCc00.zip

    升级固件的过程一般包括下载新固件,登录到AP的管理界面,选择固件升级选项,并上传新的固件文件。升级后,设备可能会重启并自动应用新的配置。注意,在升级过程中应确保AP与电源连接稳定,避免因断电导致升级失败或...

Global site tag (gtag.js) - Google Analytics