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

}

原文地址:https://www.cnblogs.com/zhsv/p/12638150.html

时间: 2024-11-09 01:05:54

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

文件和打印的技巧-判断文件上传的类型

——————————————————————————— <script type="text/javascript">                    function chkform(){                var str = document.forms[0].mypic.value;                var name = str.substring(str.lastIndexOf(".")+1).toUpperCas

struts2 文件上传下载

四.文件的上传(拦截器)和下载(stream结果类型)(需要练一遍) 1.文件上传 必要前提: a.表单method必须是post: b.enctype取值必须是multipart/form-data: c.提供文件选择域. 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-t

封装一个文件上传并检测安全性、重命名的脚本

1 <?php 2 3 /** 4 *实现文件上传 5 *@param array $file 上传的文件的五个信息 6 *@param array $allow 允许文件上传的类型 7 *@param string & $error 用来记录错误信息 8 *@param string $part 文件上传目录 9 *@param int $maxsize = 1048576 10 *@return mixed false|$nwename 失败就返回false,成功就返回新名字 11 */

PHP 多个文件上传

关键函数: is_uploaded_file():用于判断指定的文件是否是通过 HTTP POST 上传的,如果是则返回 TRUE.用于防止潜在的攻击者对原本不能通过脚本交互的文件进行非法管理,这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件. move_uploaded_file():文件上传后,首先会存储在服务器的临时目录中,可以是该函数将上传的文件移动到新位置.与 copy() 和 move() 相比,该函数还有一种额外的功能,检查并确保由第一个参数 filename 指定的文件

文件上传漏洞原理与实例测试

0x00 什么是文件上传 为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率.企业支持门户,给用户各企业员工有效地共享文件.允许用户上传图片,视频,头像和许多其他类型的文件.向用户提供的功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站的权限,或危及服务器的可能性是非常高的. 0x01 为什么文件上传存在漏洞 上传文件的时候,如果服务器脚本语言

nodejs+multer+ajax文件上传

前端 html代码 + ajax代码 form表单(无需指定action) <form enctype="multipart/form-data" method="post" class="upload-cont"> <input type="file" name="files1" class="files1"> <input type="text

6.28笔记-servlet3.0注解配置、文件上传、过滤器、监听器

一.servlet3.0注解配置 使用javaEE6.0 支持servlet3.0 value的值就是访问路径 urlPatterns的值也是访问路径 @WebServlet(name="DemoServlet3",value="/demoServlet3") public class DemoServlet3 extends HttpServlet { ... } 二.文件上传 表单 method 必须是post enctype="multipart/f

jquery uploadify 多文件上传插件 使用经验

Uploadify 官网:http://www.uploadify.com/ 一.如何使用呢? 官网原文:http://www.uploadify.com/documentation/uploadify/implementing-uploadify/在我理解的基础上,做了一些翻译吧,建议直接看官网原文,因为截止到发布这篇博客为止,官方的版本是v3.2.1使用之前我们来看下使用的最低要求. 要求 jQuery 1.4.x 或更新的版本Flash Player 9.0.24 或更新的版本服务器端实现

文件上传至服务器

使用文件上传至服务器需要导入两包commons-fileupload-1.2.2.jar与commons-io-2.4.jar 本文的servlet使用的是 servlet3.0注解配置,   不用写web.xml 文件了 建立文件时使用javaEE6.0 支持servlet3.0 value的值就是访问路径 urlPatterns的值也是访问路径  例如 @WebServlet(name="DemoServlet3",value="/demoServlet3")