一、上传
基于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 已上传完成,对文件名称入库处理等操作
}
}
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>
<%
}
%>下载完毕!