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. [LightOJ1038] Race to 1 Again

    传送门:>出错啦< 题意:给你一个整数n,每一次可以随机选择一个n的因子x(包括1和它自己),让n除以x——不停重复此过程,直到n==1. 问n被除到1的期望次数. 解题思路: 今天刚学的 ...

  2. codevs 2606 约数和问题 (数学+分块)

    题目描述 Description Smart最近沉迷于对约数的研究中. 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X) ...

  3. IDEA添加配置文件到classpath

    突然发现有一种简单的办法: IDEA 的 Mark Directory as 右键项目中的一个文件夹,会出现目录[Mark Directory as]选择[Resources Root] 实现下面原文 ...

  4. VIM 光标移动常用命令

        h或^h 向左移一个字符  k或^p 向上移一行 j或^j或^n 向下移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开头 W 移到下一个字 ...

  5. OpenDCIM-19.01操作手册

    OpenDCIM-19.01操作手册 1. 界面标签解析 1.1  用户管理 用户管理 部门管理 用户管理被存在数据表fac_User中,包含以下字段: UserID:是管理员还是用户 Name:报表 ...

  6. Mybatis Generator的model生成中文注释,支持oracle和mysql(通过修改源码的方式来实现)

    在看本篇之前,最好先看一下上一篇通过实现CommentGenerator接口的方法来实现中文注释的例子,因为很多操作和上一篇基本是一致的,所以本篇可能不那么详细. 首先说一下上篇通过实现Comment ...

  7. 添加默认安全组规则-openstack

    if [ "$1" ] ;then neutron security-group-rule-create --direction ingress --ethertype ipv4 ...

  8. 「JLOI2015」管道连接 解题报告

    「JLOI2015」管道连接 先按照斯坦纳树求一个 然后合并成斯坦纳森林 直接枚举树的集合再dp一下就好了 Code: #include <cstdio> #include <cct ...

  9. [ZJOI2016]小星星&[SHOI2016]黑暗前的幻想乡(容斥)

    这两道题思路比较像,所以把他们放到一块. [ZJOI2016]小星星 题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. ...

  10. [FJOI2016]神秘数(脑洞+可持久化)

    题目描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = ...