利用spring 文件上传

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

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";
    } 
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值