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
*/
运行结果:
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: