Struts2实现文件下载和上传

使用action 实现单文件的上传和下载


          使用 struts2实现文件上传和下载相比于Servlet 简单很多

文件下载:

       将type的类型修改为 stream ;

        增加几个参数:

              contentType:发送到浏览器的MIME类型  决定了下载的文件的类型 通常设为application/octet-stream就可以了

             contentLength:设置文件的大小

             contentDisposition:设置响应的HTTP头信息中的Content-Disposition参数的值 由两部分组成,例如:attachment 表示 下载时弹出对话框提示用户保存或者直接打开文件,后一部分表示文件的名字,中间使用 ; 隔开

            inputName:指定Action中提供的inputStream类型的属性名称

            bufferSize:设置读取和下载文件时的缓冲区大小

      Action中要有一个inputStream类型的属性 :下载文件使用的输入流


    contentType对应的文件类型

文件类型contentType设置
Wordapplication/msword
ExcelApplication/vnd.ms-excel
PPT Application/vnd.ms-powerpoint
图片image/gif    ,  image/bmp   ,  image/jpeg
文件文件text/plain
HTML网页text/hml
可执行文件application/octet-stream   通常就用这个就可以








 

      jsp:

<!-- Struts2 下载文件 -->
	<a href="<%=request.getContextPath()%>/download.action"   class="down">Struts2文件下载</a>
     js:

/**
 * 文件下载
 */
$(function(){
	$(".down").click(function(){

		//获取href
		var url = $(this).attr("href");
		//发送post请求
		window.open(url,"文件下载");
		return false;
	});
});
struts.xml

<!-- 文件下载Action -->
         <action name="download" class="mxc.sky.action.DownLoadAction">
         	<result name="success" type="stream">
         		<!-- 下载的文件的类型 -->
         		<param name="contentType">application/octet-stream</param>
         		<!-- Action中的输入流的名称 -->
         		<param name="inputName">inputStream</param>
         		<!-- response中头信息的 Content-Disposition 参数的值  filename指定文件的名字-->
         		<param name="contentDisposition">attachment;filename=${fileName}</param>
         		<!-- 指定文件下载的缓冲区的大小 -->
         		<param name="bufferSize">4096</param>
         	</result>
         </action>

action

package mxc.sky.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;

import org.apache.struts2.ServletActionContext;

/**
 * 实现文件下载
 * @author  sky-mxc
 * @date 2016年7月9日 下午6:25:55
 */
public class DownLoadAction implements Serializable {

	//名字要和 配置文件中的对应
	private InputStream inputStream = null;
	
	//文件名称
	private String fileName = null;
	
	/**
	 * 实现下载
	 *  找到文件
	 *  获取文件名称(ps:进行中文乱码处理)
	 *  将文件读入输入流
	 * @author sky-mxc  
	 * @Date 2016年7月9日下午6:39:34
	 *  @return
	 */
	public String execute(){
		
		String filePath  = ServletActionContext.getServletContext().getRealPath("file/孟jquery-1.8.3.js");
		System.out.println("debug********FilePath:"+filePath);
		
		File file = new File(filePath);
		
		//对文件名进行中文乱码处理
		try {
			fileName= new String(file.getName().getBytes("utf-8"),"iso-8859-1");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		//输入流读取文件
		try {
			inputStream= new FileInputStream(file);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return "success";
	}


	public InputStream getInputStream() {
		return inputStream;
	}

	public void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

}

文件上传

         需要用到的jar包:commons-fileupload-x.x.jar,commons-io-X.x.x.jar 

      struts2在action中使用3个属性封装文件信息

        File类型的xxx属性:与表单中的File控件的name属性一致,用于封装对应的文件

        String类型xxxFileName:名称由前面的File类型属性和FileName组合而成,是固定的语法,封装文件的名字

       String类型 xxxContentType:名称同样是组合而成,固定语法,封装文件的文件类型


    action:

package mxc.sky.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.net.URLEncoder;

import org.apache.commons.io.IOUtils;
import org.apache.struts2.ServletActionContext;

/**
 * 实现文件上传
 * @author  sky-mxc
 * @date 2016年7月9日 下午6:57:44
 */
public class UploadAction implements Serializable {

	//文件
	private File upload = null;
	
	//文件类型
	private String uploadContentType = null;
	
	//文件名称
	private String uploadFileName = null;
	
	private String message = null;
	
	public String execute() throws IOException{
		System.out.println("--------File:"+upload);
		System.out.println("--------fileContentType:"+uploadContentType);
		System.out.println("--------FileName:"+this.uploadFileName);
		
		//存储路径
		String savePth = ServletActionContext.getServletContext().getRealPath(this.uploadFileName);
		System.out.println("--------FilePath:"+savePth);
		
		FileInputStream fis = new FileInputStream(upload);
		
		FileOutputStream fos = new FileOutputStream(savePth);
		
		IOUtils.copy(fis, fos);
		
		fos.flush();
		fos.close();
		fis.close();
		
		message=URLEncoder.encode("上传路径:"+savePth,"utf-8") ;
		return "success";
	}

	public File getUpload() {
		return upload;
	}

	public void setUpload(File upload) {
		this.upload = upload;
	}

	public String getUploadContentType() {
		return uploadContentType;
	}

	public void setUploadContentType(String uploadContentType) {
		this.uploadContentType = uploadContentType;
	}

	public String getUploadFileName() {
		return uploadFileName;
	}

	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
	
}


    可以在 fileUpload拦截器中设置 文件的最大限制

    strust.xml:

<!-- 文件上传 -->
         <action name="upload" class="mxc.sky.action.UploadAction">
         	<result name="success" type="redirect">/result.jsp?message=${message}</result>
         	<interceptor-ref name="fileUpload">
				<param name="maxinumSize">50000000000000</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
         	
         </action>

    jsp:

<!-- struts2上传 -->
	<form name="frmFileUpload" action="<%=request.getContextPath()%>/upload.action" method="post" enctype ="multipart/form-data">
		<input type="file" name="upload"/>
		<button type="submit">Struts2上传</button>
	</form>

关于文件上传下载(含注解版下载)的Demo地址:https://github.com/sky-mxc/FileUploadAndDownLoad


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛系编码i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值