`

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>

 


 

分享到:
评论

相关推荐

    Django 教程中的多个文件上传

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

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

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

    FLEX带进度指示的文件上传

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

    博客系统源代码--007

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

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

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

    exif.js 文件

    获取图片方向js、解决IOS 拍照时图片旋转问题,图片压缩问题、uni-app 上传图片功能,具体用法可参考博客内容

    相册网站系统源代码--007

    2.上传文件时,注意区分它的类别(大图,小图.网站LOGO),小图的长宽建议为:150X113PX 大图的宽度最好不要超边700,不然就会将网页撑大,网站的LOGO长宽为:778X154PX。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\...

    C#语言开发,.net,基于fo-dicom的医学影像接收和发送服务程序,可对接pacs 遵循Dicom3.0医学影像标准

    C#语言开发,.net,基于fo-dicom的医学影像接收和发送服务程序,可对接pacs。遵循Dicom3.0医学影像标准通信协议 适用于:从事医学影像软件开发的工作人员

    gamit10.32-007

    gamit是MIT开发的一款用于解算长基线的GPS基线解算软件,在该领域有着其特有的魅力! 这是一个分卷压缩包,需要8个压缩文件一起才能解压,这是因为CSDN的最大文件上传限制,请大家谅解!

    BaGet Demo .Net 包源管理示例源码

    项目不是BaGet的源码,是利用BaGet把Dll文件上传到内部网络,提供给其他同事小伙伴共享下载访问dll文件的示例项目 文件目录 1.BaGetDemo -- 主示例文件 2.Dll -- 项目打包生成的 .nupkg 包文件 3.BaGetDemo.sln -- ...

    文件上传与下载模块

    文件上传与下载模块 适合研究和开发设计 jsp 源码

    005-创建项目.avi

    创建APP项目,资源较大,陆续上传中... 001-移动商城项目介绍和效果演示.avi 002-开启开发者选项和打开usb调试.avi 003-移动商城开发需要安装哪些工具.avi 004-如何把教程配套的代码运行起来.avi 005-创建项目.avi ...

    台达触摸屏编程软件DOPSoft 2.00.07 版本DOP-B -H -W DELTA_IA-HM_20171025.zip

    台达触摸屏编程软件DOPSoft 2.00.07 版本

    (第007讲) cadence 视频教程

    以前上传的这一节课由于文件大,上传文件大小限制,只能分享链接,现在补发。 cadence视频教程(第007讲) 于博士的 cadence视频教程 很详细。适合初学者,容易上手。 第007讲 主要讲解内容: 第7讲 总线的使用方法 ...

    微信小程序录音文件.silk上传服务器转mp3格式

    微信小程序录音文件.silk上传服务器并且转换mp3格式。本教程将采用nodejs/silk_v3_decoder.exe/ffmpeg三个东西配合使用。本教程是在windows下通过。 本教程包括下面几个步骤: 1、nodejs安装等一些基本使用就不说了...

    004-如何把教程配套的代码运行起来.avi

    视频较大,陆续上传中。 001-移动商城项目介绍和效果演示.avi 002-开启开发者选项和打开usb调试.avi 003-移动商城开发需要安装哪些工具.avi 004-如何把教程配套的代码运行起来.avi 005-创建项目.avi 006-快速开发第...

    Intraweb9.0.42与TMS_IW_3.3完美组合(原文件+破解)(分4块).part3

    上传权限不够,只能分4部分上传 一. IntraWeb 9.0.42的破解 1. 安装前先移除/卸载老版IntraWeb:把文件夹“delin”中的delin.bat放到delphi7或delphi2007的lib目录下运行一次。 2. 安装Intraweb时,License ...

    Intraweb9.0.42与TMS_IW_3.3完美组合(原文件+破解)(分4块).part1

    上传权限不够,只能分4部分上传 一. IntraWeb 9.0.42的破解 1. 安装前先移除/卸载老版IntraWeb:把文件夹“delin”中的delin.bat放到delphi7或delphi2007的lib目录下运行一次。 2. 安装Intraweb时,License ...

Global site tag (gtag.js) - Google Analytics