spring文件上传与下载

一、上传

        基于springMVC框架

1. spring-mvc.xml文件中增加如下代码:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
     <property name="defaultEncoding" value="utf-8"></property>   
     <property name="maxUploadSize" value="10485760000"></property>  
     <property name="maxInMemorySize" value="40960"></property>  
</bean>

2. jsp代码

<form id="identifyAddForm" method="post" enctype="multipart/form-data">
<input type="file" name="valueEvalFileName">
<input type="file" name="financeBearFileName">
</form>

需提交form表单,而不是ajax提交。


3.Controller.java文件中代码

// 上传文件处理
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Iterator<String> iter = multiRequest.getFileNames(); 
		
while (iter.hasNext()) {
	MultipartFile file = multiRequest.getFile(iter.next()); 	// 取得上传文件
			
	String fileName = file.getOriginalFilename(); 			// 取得当前上传文件的文件名称
			
	if (fileName.trim() != "") {

		String uploadFileName = UploadFileUtil.uploadFile(multiRequest, fileName, file);
		String formName = file.getName(); 			// 文件所在表单的name值,即jsp中文件name所对应的值
				
	<span style="white-space:pre">	</span>// TODO 已上传完成,对文件名称入库处理等操作
	}
}


4. 工具类UploadFileUtil.java中代码

public class UploadFileUtil {
	
	/**
	 * 上传文件并返回文件名称
	 * @author xdc
	 * @date 2015-5-28 下午3:29:16
	 * @param request
	 * @param fileName
	 * @param file
	 * @return
	 */
	public static String uploadFile(HttpServletRequest request, String fileName, MultipartFile file){
		
//		String path = request.getSession().getServletContext().getRealPath("/")+ "upload/";
		String dateTime = "(" + DateUtil.getDateString() + ")"; 
		String startStr = fileName.substring(0, fileName.lastIndexOf("."));
		String endStr = fileName.substring(fileName.lastIndexOf("."), fileName.length());
//		String allPath = path + startStr + dateTime + endStr;
		String newFileName = toUtf8String(startStr + dateTime + endStr);
		
		String allPath = "D:/upload/" + newFileName;
         
		File localFile = new File(allPath); 
        if(!localFile.exists()){
        	localFile.mkdirs();
        }
        
        try {
			file.transferTo(localFile);
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}  
        
		return startStr + dateTime + endStr;
	}
	
	/**
	 * 中文转为UTF8
	 * @author xdc
	 * @date 2015-5-28 下午5:35:50
	 * @param s
	 * @return
	 */
	public static String toUtf8String(String s) {
		
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			if (c >= 0 && c <= 255) {
				sb.append(c);
			} else {
				byte[] b;
				try {
					b = Character.toString(c).getBytes("utf-8");
				} catch (Exception ex) {
					b = new byte[0];
				}
				for (int j = 0; j < b.length; j++) {
					int k = b[j];
					if (k < 0)
						k += 256;
					sb.append("%" + Integer.toHexString(k).toUpperCase());
				}
			}
		}
		return sb.toString();
	}
}


toUtf8String()方法将中文进行转码,保存特殊名称到磁盘,但数据依旧需保存中文名称以便查看。下载时在jsp同样调用该方法对中文转码,故可找到响应文件。


二、下载

下载借助 jspsmartupload.jar实现。

1. 下载页面代码

<a href="download.jsp?fileName=${IDEN_VALUE_EVAL_FILE}">${IDEN_VALUE_EVAL_FILE}</a>

down.jsp所在路径为项目根目录,即WebRoot下与index.jsp平级。


2.down.jsp代码

<%@ page contentType="text/html;charset=utf8"%>
<%@ page import="com.jspsmart.upload.*"%>
<%!public String toUtf8String(String s) {

		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			if (c >= 0 && c <= 255) {
				sb.append(c);
			} else {
				byte[] b;
				try {
					b = Character.toString(c).getBytes("utf-8");
				} catch (Exception ex) {
					System.out.println(ex);
					b = new byte[0];
				}
				for (int j = 0; j < b.length; j++) {
					int k = b[j];
					if (k < 0)
						k += 256;
					sb.append("%" + Integer.toHexString(k).toUpperCase());
				}
			}
		}
		return sb.toString();
	}%>
<%
	response.reset();			//如果在weblogic底下同样要加上此句
	String filePath = "D:/upload/";
	String fileName = request.getParameter("fileName");

	// 新建一个SmartUpload对象
	SmartUpload su = new SmartUpload();
	
	// 初始化 
	su.initialize(pageContext);
	
	// 设定contentDisposition为null以禁止浏览器自动打开文件, 保证点击链接后是下载文件。若不设定,则下载的文件扩展名为
	//doc时,浏览器将自动用word打开它。扩展名为pdf时, 浏览器将用acrobat打开。
	su.setContentDisposition(null);
	
	try {
		// 下载文件
		su.downloadFile(filePath + toUtf8String(fileName));
	} catch (java.io.FileNotFoundException e) {
%>
<script Language="javascript">
	alert('文件未找到!');
</script>
<%
	}
%>下载完毕!




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值