1 web.xml
<!-- 配置Spring 提供的编码过滤器 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
2 applicationContest.xml
<!-- 开启组件扫描 -->
<context:component-scan base-package="com.xdl" ></context:component-scan>
<!-- 开启标注形式的mvc -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图处理器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 配置一个文件解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 限制上传文件大小 -->
<property name="maxUploadSize" value="1024000"></property>
<property name="resolveLazily" value="true"></property>
</bean>
upload.jsp
<body>
<h3> 文件上传</h3>
<form action="upload.do" method="post" enctype="multipart/form-data">
<input type="text" name="username" > <br>
<input type="file" name="mf" > <br>
<input type="submit" value="上传">
</form>
</body>
show.jsp
<body>
<h3>好看吗</h3>
<img src="${imgPath}">
</body>
---------------------------------------------------------------------------------
Md5Util
package com.xdl.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Util {
public static String md5Str(String data){
StringBuffer strBuf = new StringBuffer();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] databytes = data.getBytes();
md.update(databytes);
//获取经过MD5算法处理之后的字节码
byte[] md5Bytes = md.digest();
System.out.println(md5Bytes.length);
//如何把一个16长度的byte数组变成32位长度的16进制形式
for(int i = 0;i < md5Bytes.length;i++){
byte b = md5Bytes[i];
//一个byte等于8bit 4bit可以表达成一个位16进制
//变成16进制形式时最长是两位
String tempStr = Integer.toHexString(b&0xff);
if(tempStr.length()<2){
tempStr = "0"+tempStr;
}
strBuf.append(tempStr);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return strBuf.toString();
}
/**加盐*/
public static String md5StrSalt(String data,String salt){
data = data + salt;
StringBuffer strBuf = new StringBuffer();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] databytes = data.getBytes();
md.update(databytes);
// 获取经过md5 算法处理之后的字节码
byte[] md5Bytes = md.digest();
System.out.println(md5Bytes.length);
// 如何把 一个 16 长度的byte 数组 变成32 位长度的16进制形式
for(int i=0;i<md5Bytes.length;i++){
byte b = md5Bytes[i];
// 一个byte 等于 8bit 4bit 可以表达成一个位16进制
// 变成16进制形式时 最长是两位
String tempStr = Integer.toHexString(b&0xff);
//System.out.println(tempStr);
if(tempStr.length() < 2){
tempStr = "0"+tempStr;
}
strBuf.append(tempStr);
}
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return strBuf.toString();
}
}
-----------------------------------------------------------------------------------
package com.xdl.controller;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import com.xdl.util.Md5Util;
@Controller
public class FileUploadController {
@RequestMapping("/toUpload.do")
public String toUpload(){
return "upload";
}
@RequestMapping("/upload.do")
public String upload(MultipartFile mf,String username,
HttpServletRequest request){
/**"/guoaj/home/"**/
//文件名+大小+文件
System.out.println(mf.getOriginalFilename() + ":" + mf.getSize()
+ ":" +username);
//获取服务器文件上传的真实路径 然后根据用户id 和 当前系统时间构建一个文件名
// 保存文件的相对路径 或者 绝对路径
String realPath = request.getServletContext().getRealPath("datas");
System.out.println(realPath);
//原文件名
String oriFileName = mf.getOriginalFilename();
// 获取后缀
String suffix = oriFileName.substring(oriFileName.lastIndexOf("."));
//打印后缀
System.out.println("suffix:"+suffix);
String fileName = username + "_" + System.currentTimeMillis()
+"_"+Md5Util.md5Str(mf.getOriginalFilename())+suffix;
// 构建一个磁盘真实文件
System.out.println(fileName);
File file = new File(realPath + "/" + fileName);
try {
// 把文件转移到磁盘
mf.transferTo(file);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 往request 存放图片的相对路径
request.setAttribute("imgPath", "datas/"+fileName);
return "show";
}
@ExceptionHandler
public String execute(Exception e){
return "error";
}
}