6、SpringMVC实战:利用SpringMVC进行文件上传-小5000字匠心出品

SpringMVC中文件上传

    • 1.文件上传
  • 2.含有条件的文件上传操作

1.文件上传

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户注册</title>
</head>
<body>
<%--
   必须注意:
     [A] 提交方式method="post"
     [B]enctype="multipart/form-data"  二进制流
--%>
<h3>用户添加</h3>
<form method="post" enctype="multipart/form-data" action="file">
    <p>
        用户名:<input type="text" name="uname"/>${
   
     msg}
    </p>
    <p>
        分数:<input type="text" name="score"/>
    </p>
    <p>
        年龄:<input type="text" name="age"/>
    </p>
    <p>
        文件:<input type="file" name="fi"/>
    </p>
    <p>
        <input type="submit" value="提交"/>
    </p>
</form>
</body>
</html>

package com.controller;

import com.pojo.Student;

import org.springframework.stereotype.Controller;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;

@Controller
public class MyCon {
   
     
    //文件下载操作
    @RequestMapping("file")
    public void fileDownLoad(String  uname, int  age, MultipartFile fi) throws Exception {
   
     
        System.out.println(uname+"---"+age);
        System.out.println(fi.getName()+"---"+fi.getSize()+"---"+fi.getContentType()+"---"+fi.getOriginalFilename());
        fi.transferTo(new File("D:/img3/"+fi.getOriginalFilename()));
    }

运行结果:
*
*
*

2.含有条件的文件上传操作

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户注册</title>
</head>
<body>
<%--
   必须注意:
     [A] 提交方式method="post"
     [B]enctype="multipart/form-data"  二进制流
--%>
<h3>用户添加</h3>
<form method="post" enctype="multipart/form-data" action="fileUpload">
    <p>
        用户名:<input type="text" name="name"/>${
   
     msg}
    </p>
    <p>
        分数:<input type="text" name="score"/>
    </p>
    <p>
        年龄:<input type="text" name="age"/>
    </p>
    <p>
        文件:<input type="file" name="fi"/>
    </p>
    <p>
        <input type="submit" value="提交"/>
    </p>
</form>
</body>
</html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"  %>
<html>
<head>
    <title>Title</title>
    <style type="text/css">

        th {
   
     
            width: 90px
        }

    </style>
</head>
<body>

<h3>成功页面</h3>

<table border="1px" align="center">
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>分数</th>
        <th>图片</th>
        <th>操作</th>
    </tr>
    <c:forEach items="${list}" var="stu">
        <tr>
            <th>${
   
     stu.id}</th>
            <th>${
   
     stu.name}</th>
            <th>${
   
     stu.score}</th>
            <th><img src="/AAAAA/upload/${stu.filename}" height="80px"></th>
            <th><a href="fileDownLoad?filename=${stu.filename}&filetype=${stu.filetype}">下载</a></th>
        </tr>
    </c:forEach>
</table>
</body>
</html>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"  %>
<html>
<head>
    <title>Title</title>
    <style type="text/css">

        th {
   
     
            width: 90px
        }

    </style>
</head>
<body>

<h3>成功页面</h3>

<table border="1px" align="center">
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>分数</th>
        <th>图片</th>
        <th>操作</th>
    </tr>
    <c:forEach items="${list}" var="stu">
        <tr>
            <th>${
   
     stu.id}</th>
            <th>${
   
     stu.name}</th>
            <th>${
   
     stu.score}</th>
            <th><img src="/AAAAA/upload/${stu.filename}" height="80px"></th>
            <th><a href="fileDownLoad?filename=${stu.filename}&filetype=${stu.filetype}">下载</a></th>
        </tr>
    </c:forEach>
</table>
</body>
</html>
package com.controller;

import com.pojo.Student;

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.util.ArrayList;
import java.util.UUID;

@Controller
public class MyCon {
   
     
    //文件带条件的上传
    @RequestMapping("fileUpload")
    public String fileUpload(Student stu, MultipartFile fi, HttpServletRequest request) throws Exception {
   
     
        //提取后缀名
        String substring = fi.getOriginalFilename().substring(fi.getOriginalFilename().lastIndexOf("."));
        /*****判断文件的后缀******/
        if (!(".png".equals(substring) || ".gif".equals(substring) || ".jpg".equals(substring))) {
   
     
            request.setAttribute("msg", "上传文件必须是图片");
            return "forward:/save.jsp";
        }
        /****限定上传文件的大小**/
       /* if(fi.getSize()>20*1024){
            request.setAttribute("msg","上传文件最大是20k");
            return "forward:/save.jsp";
        }*/
        /*****相同图片名称覆盖****/
        String uuid = UUID.randomUUID().toString();
        // 1.jpg
        String filename = uuid + substring;
        /****获得服务器的目录******/
        String realPath = request.getServletContext().getRealPath("/upload");
        /**自动创建文件目录**/
        File file = new File(realPath);
        if (!file.exists()) {
   
     
            file.mkdirs();
        }
        //文件上传完毕
        fi.transferTo(new File(file, filename));
        stu.setFilename(filename);
        stu.setFiletype(fi.getContentType());
        ArrayList list=new <Student>ArrayList();
        list.add(stu);
        request.setAttribute("list",list);
        int save =1;
        try {
   
     
            System.out.println(stu);
        }catch (Exception e){
   
     
            save=0;
        }
        System.out.println(stu);
        if (save > 0) {
   
     
            return "forward:/success.jsp";
        } else {
   
     
            request.setAttribute("msg", "添加失败");
            return "forward:/save.jsp";
        }
    }
}
/**
 * 遇到的问题:
 * <p>
 * 1、上传图片的时候名字中文乱码:
 * <property name="defaultEncoding" value="utf-8"></property>
 * <p>
 * 2、上传的文件夹名称必须给出:
 * <p>
 * !file.exists()
 * <p>
 * 3、上传不到当前服务器的路径中:
 * <p>
 * request.getServletContext().getRealPath("/upload");
 * <p>
 * 4、相同的图片名称会覆盖:
 * <p>
 * UUID.randomUUID().toString()
 * <p>
 * 5、无法指定上传图片的大小:
 * <p>
 * A、 fi.getSize()>20*1024
 * <p>
 * B、maxUploadSize--异常解析器
 * <p>
 * 6、无法指定上传图片的类型: ok
 */

运行结果:
*
*
*

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: