Sping文件上传

5 篇文章 0 订阅
4 篇文章 0 订阅


1.Spring 实现文件上传
  1.1 建立一个项目  拷贝Spring 配置文件  和 导入对应的jar包(ioc aop mvc )
  1.2 分别在web.xml 中配置 DispatcherServlet  和 在Spring 配置文件中
    开启组件扫描和标注形式的mvc  配置 ViewResolver 
  1.3 在WEB-INF 下写一个上传页面  并写一个控制器(写组件创建标注和映射请求的标注)
     其中有个方法可以调整上传文件的页面。 
  1.4 填充 upload.jsp 中的内容
     必须是post请求   enctype="multipart/form-data"   必须有一个文件元素 file
  1.5 配置文件解析器  和 拷贝对应jar包

<!-- 配置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>



<!-- 开启组件扫描  -->
 <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="10240"></property>
         <property name="resolveLazily" value="true"></property>
    </bean>

show.jsp:

<img  src="${imgPath}">

error.jsp

<h3>文件超出限制 最大限制10k</h3>


<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>

Md5Util:

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();
 }
}

控制器:

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){
     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;
     // 构建一个磁盘真实文件
     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";
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值