zoukankan      html  css  js  c++  java
  • struts2 实现文件上传下载 (下载支持中文文件名)代码

    struts2 实现文件上传:


    Action 代码:

    package com.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class FileUploadAction extends BaseAction{
    
    	
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	
    
    	/**
    	 * 上传后存放在临时文件夹里的文件
    	 */
    	private File file;
    	
    	/**
    	 * 文件名称
    	 */
    	private String fileFileName;
    	
    	/**
    	 * 文件的MIME类型
    	 */
    	private String fileContentType;
    	
    	
    	/**
    	 * 保存的路径
    	 */
    	private String savePath;
    	
    	
    	public String getSavePath() {
    		return savePath;
    	}
    
    	public void setSavePath(String savePath) {
    		this.savePath = savePath;
    	}
    
    	public File getFile() {
    		return file;
    	}
    
    	public void setFile(File file) {
    		this.file = file;
    	}
    
    	public String getFileFileName() {
    		return fileFileName;
    	}
    
    	public void setFileFileName(String fileFileName) {
    		this.fileFileName = fileFileName;
    	}
    
    	public String getFileContentType() {
    		return fileContentType;
    	}
    
    	public void setFileContentType(String fileContentType) {
    		this.fileContentType = fileContentType;
    	}
    	
    	
    	public String execute() throws Exception
    	{
    		
    		 String root = ServletActionContext.getServletContext().getRealPath(savePath);
    		
    	        InputStream is = new FileInputStream(file);
    
    	        OutputStream os = new FileOutputStream(new File(root, fileFileName));
    	        
    	        
    	        byte[] buffer = new byte[500];
    	        @SuppressWarnings("unused")
    			int length = 0;
    	        
    	        while(-1 != (length = is.read(buffer, 0, buffer.length)))
    	        {
    	            os.write(buffer);
    	        }
    	        
    	        os.close();
    	        is.close();
    	        
    	        
    	        return SUCCESS;
    		
    	}
    	
    	
    }
    


    struts2.xml配置信息:

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE struts PUBLIC   
         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
         "http://struts.apache.org/dtds/struts-2.0.dtd">
         
         
    <struts>
    
    	<package name="fileUpload" extends="struts-default" namespace="/">
    	
    		<action name="fileUpload_*" class="com.action.FileUploadAction" method="{1}">
    		 
              <param name="savePath">/upload</param> //注意在当前工程里建一个 upload文件夹
              
    		<result>
    			/login.jsp
    		</result>
    		
    		 </action>
    
    
    	</package>
    </struts>

    文件上传的 jsp 页面:

    	<form action="fileUpload.action" method="post" enctype="multipart/form-data">
            file: <input type="file" name="file"/><br>
            <input type="submit" value="submit"/>
        </form>

    struts2实现文件下载源码:支持中文文件名

    注意:下载文件的大小设置问题,默认是2M. 可以在struts.properties 设置  struts.multipart.maxSize=10485760 (10M 大小根据自己情况)

    action 的代码:

    package com.action;
    
    import java.io.IOException;
    import java.io.InputStream;
    import org.apache.struts2.ServletActionContext;
    
    
    public class FileDownloadAction extends BaseAction{
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	/**
    	 * 文件名称
    	 */
    	private String fileName;
    	
    	
    	public String getFileName() throws IOException {
    		
    	
    		<span style="color:#ff0000;">return  new String(fileName.getBytes(), "ISO8859-1"); //转码 使其支持中文,不然无法显示文件名的中文字符</span>
    	}
    	
    		public void setFileName(String fileName) {
    			
    				this.fileName = fileName;;
    		
    		}
    		
    		 public InputStream getInputStream() throws Exception{
    
    			 return ServletActionContext.getServletContext().getResourceAsStream( fileName);
    			  
    			   }
    			 
    			    public String execute()throws Exception{
    					return SUCCESS;
    				}
    }
    

    下载的 struts2.xml配置信息:

    <action name="download" class="com.action.FileDownloadAction">
    	
    			<result type="stream" name="success">		
    				<param name="contentDisposition">attachment;fileName="${fileName}"</param>
    				<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
    				<param name="inputName"><span style="color:#ff0000;">InputStream</span></param> //InputStream 是有Action中的<span style="font-family: Arial; font-size: 14px; line-height: 26px;">getInputStream()方法 去掉get而定的,要一致</span>
    				<param name="bufferSize">10485760</param>//文件大小(10M)
    			</result>
    		
    		
    	</action>

    jsp页面:

    <a href="download.action?fileName=upload/铭记11er.mp3">点击下载</a>


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    通过Spring使用远程访问和web服务
    mongoDB id 导出,dump,sed,count,mysql import等用法示例
    Spring属性占位符 PropertyPlaceholderConfigurer
    关于Spring管理的类如何创建对象
    spring中反射机制和注入的使用
    Spring 反射注入+全注解注入
    Spring 注解@Component,@Service,@Controller,@Repository
    @Transactional spring 配置事务 注意事项
    Spring 注解Autowired自动注入bean异常解决
    Spring事务的传播行为 @Transactional
  • 原文地址:https://www.cnblogs.com/lovelyx/p/4867115.html
Copyright © 2011-2022 走看看