springmv的文件上传(多种类型)

Posted lemmon_water

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springmv的文件上传(多种类型)相关的知识,希望对你有一定的参考价值。

1.导入Jar包

2.jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>文件上传</title>
  </head>
  <body>
  <h2>单文件上传【不改名字】</h2>
  <form action="/upload/upload01.action" enctype="multipart/form-data" method="post">
    选择文件:<input type="file"  name="mf"/>
      <br>
    提交文件:<input type="submit" value="提交">
  </form>
  <br>
  <h2>多文件上传【不改名字】</h2>
  <form action="/upload/upload02.action" enctype="multipart/form-data" method="post">
    选择文件:<input type="file"  name="mf"/>
    <br>
    选择文件:<input type="file"  name="mf"/>
    <br>
    选择文件:<input type="file"  name="mf"/>
    <br>
    提交文件:<input type="submit" value="提交">
  </form>
  <br>
  <h2>单文件上传【改名字】</h2>
  <form action="/upload/upload03.action" enctype="multipart/form-data" method="post">
    选择文件:<input type="file"  name="mf"/>
    <br>
    提交文件:<input type="submit" value="提交">
  </form>

  <br>
  <h2>单文件上传【改名字并分文件夹管理】</h2>
  <form action="/upload/upload04.action" enctype="multipart/form-data" method="post">
    选择文件:<input type="file"  name="mf"/>
    <br>
    提交文件:<input type="submit" value="提交">
  </form>

  <br>
  <h2>单文件上传【改名字并分文件夹管理保存到数据库】</h2>
  <form action="/upload/upload05.action" enctype="multipart/form-data" method="post">
    选择文件:<input type="file"  name="mf"/>
    <br>
    提交文件:<input type="submit" value="提交">
  </form>
  </body>
</html>

 3.配置文件添加

<!-- 配置springmvc对文件上传的支持 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 设置文件名的编码 -->
		<property name="defaultEncoding" value="utf-8"></property>
		<!-- 配置最上传文件的支持 20M -->
		<property name="maxUploadSize" value="20971520"></property>
		<!-- 设置文件上传的临时目录 -->
		<property name="uploadTempDir" value="/upload/temp" />
	</bean>

 4.controller

package com.zhs.sys.controller;

import com.zhs.sys.service.AttachmentService;
import com.zhs.sys.utils.RandomUtils;
import com.zhs.sys.vo.AttachmentVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Date;

@Controller
@RequestMapping("upload")
public class FileUploadController {
    /**
     * 上传一个文件不改名字
     */
    @RequestMapping("upload01")
    public String upload01(MultipartFile mf, HttpServletRequest request){
      //1.得到文件的相关信息
        String contentType = mf.getContentType();
        String name = mf.getName();
        String oldname = mf.getOriginalFilename();
        long size = mf.getSize();
        System.out.println(contentType);
        System.out.println(name);
        System.out.println(oldname);
        System.out.println(size);

        //2.得到要上传的路径
        String realPath=request.getServletContext().getRealPath("/upload");
        //3.组装文件对象
        File file = new File(realPath,oldname);
        //4.把文件流写到file
        try {
            mf.transferTo(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "success";
    }

    /**
     * 上传多个文件不改名字
     */
    @RequestMapping("upload02")
    public String upload02(MultipartFile[] mf, HttpServletRequest request){
        if(null!=mf&&mf.length>0){
            for(int i=0;i<mf.length;i++){
                //  得到文件的相关信息
                String contentType = mf[i].getContentType();
                String name = mf[i].getName();
                String oldname = mf[i].getOriginalFilename();
                long size = mf[i].getSize();
                System.out.println(contentType);
                System.out.println(name);
                System.out.println(oldname);
                System.out.println(size);

                //得到要上传的路径
                String realPath=request.getServletContext().getRealPath("/upload");
                //组装文件对象
                File file = new File(realPath,oldname);
                //把文件流写到file
                try {
                    mf[i].transferTo(file);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return "success";
    }

    /**
     * 上传一个文件【改名字】
     */
    @RequestMapping("upload03")
    public String upload03(MultipartFile mf, HttpServletRequest request){
        //1.得到文件的相关信息
        String oldname = mf.getOriginalFilename();
        //2.得到要上传的路径
        String realPath=request.getServletContext().getRealPath("/upload");
        //3.得到新名称
        String newName = RandomUtils.createRandomFileNameUseTime(oldname);
        //4.组装文件对象
        File file = new File(realPath,oldname);
        //5.把文件流写到file
        try {
            mf.transferTo(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "success";
    }

    /**
     * 上传一个文件【改名字并分文件夹管理】
     */
    @RequestMapping("upload04")
    public String upload04(MultipartFile mf, HttpServletRequest request){
        //1.得到文件的相关信息
        String oldname = mf.getOriginalFilename();
        //2.得到要上传的路径
        String realPath=request.getServletContext().getRealPath("/upload");
        //3.根据当前日期得到文件夹名称
        String dirName = RandomUtils.createDirUseDate();
        //根据文件夹
        File dir = new File(realPath, dirName);
        //判断文件夹是否存在
        if (!dir.exists()) {
            dir.mkdirs();//创建文件夹
        }
        //6.得到新名称
        String newName = RandomUtils.createRandomFileNameUseTime(oldname);
        //7.组装文件对象
        File file = new File(dir,newName);
        //8.把文件流写到file
        try {
            mf.transferTo(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "success";
    }

    /**
     * 上传一个文件【改名字并分文件夹管理保存到数据库】
     */
    @Autowired
    private AttachmentService attachmentService;

    @RequestMapping("upload05")
    public String upload05(MultipartFile mf, HttpServletRequest request){
        String contentType = mf.getContentType();
        long size = mf.getSize();
        //1.得到文件的相关信息
        String oldname = mf.getOriginalFilename();
        //2.得到要上传的路径
        String realPath=request.getServletContext().getRealPath("/upload");
        //3.根据当前日期得到文件夹名称
        String dirName = RandomUtils.createDirUseDate();
        //根据文件夹
        File dir = new File(realPath, dirName);
        //判断文件夹是否存在
        if (!dir.exists()) {
            dir.mkdirs();//创建文件夹
        }
        //6.得到新名称
        String newName = RandomUtils.createRandomFileNameUseTime(oldname);
        //7.组装文件对象
        File file = new File(dir,newName);
        //8.把文件流写到file
        try {
            mf.transferTo(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //9.保存信息到数据库
        AttachmentVo vo = new AttachmentVo();
        vo.setContenttype(contentType);
        vo.setSize(Double.valueOf(size));
        vo.setOldname(oldname);
        vo.setUploadtime(new Date());
        vo.setPath("upload/"+dirName+"/"+newName);//存相对路径
        attachmentService.addAttachment(vo);
        return "success";
    }
}

 5.工具类

package com.zhs.sys.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * 生成随机字符串
 */
public class RandomUtils {
    private static SimpleDateFormat format1=new SimpleDateFormat("yyyyMMddHHmmssSSS");
    private static Random random =new Random();
    /**
     * 使用时间+4位随机数
     */
    public static String createRandomFileNameUseTime(String oldName){
        //得到文件名的最后一个点的下表
        int lastDotIndex = oldName.lastIndexOf(".");
        //从lastDotIndex截取到oldName.length()
        String suffix = oldName.substring(lastDotIndex, oldName.length());
        //生成时间字符串
        String timeStr=format1.format(new Date());
        //生成四位随机数
        int random4Num=random.nextInt(9000)+1000;
        return timeStr+random4Num+suffix;
    }

    public static void main(String[] args) {
        System.out.println(createRandomFileNameUseGNTime("a.b.daasf.sfa.feg.jpg"));
    }

    /**
     * 根据日期生成文件夹名称
     */
    private static SimpleDateFormat format2=new SimpleDateFormat("yyyy-MM-dd");
    public static String createDirUseDate(){
        return format2.format(new Date());
    }

    /**
     * 使用uuid
     */
    public static String createRandomFileNameUseUUID(String oldName){
        //得到文件名的最后一个点的下表
        int lastDotIndex = oldName.lastIndexOf(".");
        //从lastDotIndex截取到oldName.length()
        String suffix = oldName.substring(lastDotIndex, oldName.length());
        //生成uuid字符串
        String uuid = UUID.randomUUID().toString().replace("-","");
        return uuid+suffix;
    }

    /**
     * 使用格林毫秒+4位承随机数
     */
    public static String createRandomFileNameUseGNTime(String oldName){
        //得到文件名的最后一个点的下表
        int lastDotIndex = oldName.lastIndexOf(".");
        //从lastDotIndex截取到oldName.length()
        String suffix = oldName.substring(lastDotIndex, oldName.length());
        //生成时间字符串
        long time = new Date().getTime();
        //生成四位随机数
        int random4Num=random.nextInt(9000)+1000;
        return time+random4Num+suffix;
    }

}

 

以上是关于springmv的文件上传(多种类型)的主要内容,如果未能解决你的问题,请参考以下文章

java Ftp上传创建多层文件的代码片段

前端文件上传多种方式

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

Rails 回形针,多种不同类型(PDF、图像、文档...)

SpringMV---params and headers

常用python日期日志获取内容循环的代码片段