4个代码

  1、前端JSP

  2、自定义异常类

  3、文件上传抽象类

  4、Servlet

1.JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<h3>文件上传</h3>
<span style="color: red">${errorMsg}</span>
<form action="/upload" method="post" enctype="multipart/form-data">
账号:<input type="text" name="username"/><br>
邮箱:<input type="email" name="email"><br>
头像:<input type="file" name="headimg"><br> <input type="submit" value="注册">
</form>
</body>
</html>

2.自定义异常类

package com.vae.Upload;

public class LogicException extends RuntimeException{

    /**
*
* @param message 异常的信息,可以自定义的
*/
public LogicException(String message) {
super(message);
} /**
*
* @param message 异常的信息
* @param cause 异常的根本原因
*/
public LogicException(String message, Throwable cause) {
super(message, cause);
}
}

3.文件上传的抽象类

package com.vae.Upload;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils; import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.UUID; public class FileUtil { //设置允许接收的文件的格式,我这里设置为只能是图片
private static final String ALLWED_IMAGE_TYPE ="png,jpg,gif,jpeg"; public static void upload(HttpServletRequest req) { //解析和检查请求,是否是post方式,默认是二进制流格式
Boolean isMultipart=ServletFileUpload.isMultipartContent(req);
if (!isMultipart) {
return; //如果不是就不用上传了
}
try { //创建FileItemFactory对象
FileItemFactory factory=new DiskFileItemFactory();
//设置缓存区大小,默认大小是10kb,
((DiskFileItemFactory) factory).setSizeThreshold(20*1024);
//设置临时目录,默认是Tomcat下的temp,不建议设置
//((DiskFileItemFactory) factory).setRepository(临时目录不建议修改); //创建文件上传的处理器
ServletFileUpload upload=new ServletFileUpload(factory);
//单个文件上传大小限制为2M
upload.setFileSizeMax(1024*1024*2);
//这次请求上传文件的大小(整个表单)限制为3M
upload.setSizeMax(1024*1024*3); //解析请求
List<FileItem> items=upload.parseRequest(req);
//迭代出每一个FileItem
for (FileItem item : items) {
String fileName = item.getFieldName();
if (item.isFormField()) {
//普通的表单控件
String value = item.getString("utf-8");
System.out.println(fileName + "->" + value);
} else {
//----------------先获取上传文件的拓展名
String ext = FilenameUtils.getExtension(item.getName());
String [] allowedImagetype=ALLWED_IMAGE_TYPE.split(",");
//-----------------判断上传文件的拓展名在不在我设定的范围之内,不在的话提醒并且结束方法
if (!Arrays.asList(allowedImagetype).contains(ext)) {
throw new LogicException("你上传的不是图片,请重新上传图片");
} //上传文件的控件
String RandomName = UUID.randomUUID().toString()+"."+FilenameUtils.getExtension(item.getName());
System.out.println(fileName + "->" + FilenameUtils.getName(item.getName())); //一个的标签的name,一个是文件的name
String path=req.getServletContext().getRealPath("/upload");
System.out.println(path);
item.write(new File(path, RandomName)); //把上传的文件保存到某个文件中
//System.out.println(item.isInMemory());//判断文件资源是否在内存中
}
} }
catch (FileUploadBase.FileSizeLimitExceededException e){
throw new LogicException("单个文件的上传大小不得超过2M");
}
catch (FileUploadBase.SizeLimitExceededException e){
throw new LogicException("所有上传文件的大小不得超过3M");
}
//Exception会捕捉我们的LogicException异常提示,所以我们在上面写一个,便于把LogicException异常返回给Servlet
catch (LogicException e){
throw e;
}
catch (Exception e) {
e.printStackTrace();
} } }

4.Servlet

package com.vae.Upload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet("/upload")
public class UploadServlet extends HttpServlet { @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
FileUtil.upload(req);
}catch (LogicException e){
//拿到我们的LogicException异常信息
String Msg=e.getMessage();
req.setAttribute("errorMsg",Msg);
req.getRequestDispatcher("/input.jsp").forward(req,resp);
} } }

Java工具之上传文件的更多相关文章

  1. Java Web之上传文件

    本篇文章你会学到 1. Apache FileUpload组件 2.上传文件保存的路径和名称问题 3.缓存大小和临时目录 4.控制文件上传的格式 先讲一个简单的例子,一个注册页面,有账号,邮箱,和头像 ...

  2. java socket之上传文件

    一.功能介绍 该功能主要实现,将客户端的:F:/work/socketSample/filetemp/client/test_client.txt上传到服务端F:/work/socketSample/ ...

  3. Java ftp上传文件方法效率对比

    Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...

  4. java 后台上传文件

    java 后台上传文件 public static String uploadFile(File file, String RequestURL) throws IOException { Strin ...

  5. Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument

    Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...

  6. Java ftp 上传文件和下载文件

    今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...

  7. selenium测试(Java)--上传文件(十五)

    1. 当页面中是通过input标签实现上传功能时,可以使用selenium来上传功能. 如下: package com.test.upload; import java.io.File; import ...

  8. java(SSM)上传文件到七牛云(对象存储)

    项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云.这里的思路很简单, 就是移动端.pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后, 将文件上传到七牛云, ...

  9. java+web上传文件夹内的所有文件

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...

随机推荐

  1. SpringMVC的缓存对静态资源的影响 304 Not Modified

    我们知道在springmvc的配置中,可以添加缓存,但是缓存到底对静态资源有什么影响? 测试 没有添加缓存 <mvc:resources mapping="/image/**" ...

  2. hiho1249 Xiongnu's Land

    题目链接:http://hihocoder.com/problemset/problem/1249 题目大意:有一个大正方形里面有好多不重叠的小矩形,怎么找出一条竖线分割这个正方形,使得两边的矩形面积 ...

  3. maven "mvn不是内部或外部命令,也不是可运行的程序或批处理文件"

    配置maven环境变量cmd控制台提示:mvn不是内部或外部命令,也不是可运行的程序或批处理文件 首先maven环境变量: 变量名:MAVEN_HOME 变量值:E:\apache-maven-3.2 ...

  4. Nagios 监控windows server Apache 服务

    监控机需要使用check_apachestatus.pl插件插件下载地址:https://exchange.nagios.org/directory/Tutorials/Other-Tutorials ...

  5. 洛谷P4891 序列(势能线段树)

    洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...

  6. Hdoj 1160.FatMouse's Speed 题解

    Problem Description FatMouse believes that the fatter a mouse is, the faster it runs. To disprove th ...

  7. 【APIO2018】铁人两项(圆方树,动态规划)

    [APIO2018]铁人两项(圆方树,动态规划) 题面 UOJ 洛谷 BZOJ 题解 嘤嘤嘤,APIO的时候把一个组合数写成阶乘了,然后这题的70多分没拿到 首先一棵树是很容易做的,随意指定起点终点就 ...

  8. mac上安装memcache

    1. 安装 brew (http://brew.sh/) /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/H ...

  9. 【UNR #1】火车管理

    题目描述 uoj 旗下有一个火车站,用来管理属于 uoj 的小火车. 火车站一共有 nn 条编号为 1,…,n1,…,n 的,只有一端的用来存放小火车的铁路,由于小火车特殊的构造,每条铁路可以停放无数 ...

  10. layer 弹出层

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...