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. 用递归方法判断字符串是否是回文(Recursion Palindrome Python)

    所谓回文字符串,就是一个字符串从左到右读和从右到左读是完全一样的.比如:"level" .“aaabbaaa”. "madam"."radar&quo ...

  2. swagger如何测试List类型参数

    使用swagger 时,往往会用到类似下面这样的注解 @ApiImplicitParam(name = "id", value = "主键", dataType ...

  3. Linux qemu-nbd mount qemu disk image

    Linux qemu-nbd mount qemu disk image deepin@deepin:~$ deepin@deepin:~$ qemu-nbd --help Usage: qemu-n ...

  4. docker 创建私有仓库

    由于国内访问国际网络缓慢,从DockerHub下载镜像的速度感人,所以我们有必要在本地或者自己的云服务器上搭建一套镜像仓库,提高容器下载速度使用私有仓库需修改地址:Centos 7 Docker配置: ...

  5. Before NOIP 2018

    目录 总结 刷题 2018 - 9 - 24 2018 - 9 - 25 2018 - 9 - 26 2018 - 9 - 27 2018 - 9 - 28 2018 - 9 - 29 2018 - ...

  6. 自学华为IoT物联网_05 能源工业物联网常见问题及解决方案

    点击返回自学华为IoT物流网 自学华为IoT物联网_05 能源工业物联网常见问题及解决方案 1. 1 能源工业--油田业务面临的三大挑战 故障处理不及时: 部分油田开采难道大.机械故障较多.现场发生的 ...

  7. 「浙大ACM」图森未来杯游记一篇以及简易口胡题解

    前言 蒟蒻有参加了ACM比赛,这一次有适合HY和慕容宝宝大佬一起比的,他们好巨啊,把我带飞了. 又是窝掌机,QAQ,他们仗着自己巨,就欺负窝... 我又打了\(4\)个小时的代码,而且那个键盘太恶心了 ...

  8. W10笔记本电脑弄成WIFI

    用网线连接的笔记本弄成WIFI供手机上网.以前是买了一个随身 WIFI,可以当网卡使用.后来使用命令 // 建立WIFI netsh wlan set hostednetwork mode=allow ...

  9. <Android基础>(三) UI开发 Part 1

    1.常用控件 1)TextView 2)Button 3)EditText 4)ImageView 5)ProgressBar 6)AlertDialog 7)ProgressDialog 2.四种布 ...

  10. bzoj1226/luogu2157 学校食堂 (状压dp)

    我们先约定:(左) 窗口_人人人人人 (右) 可以发现,我们只需要知道最靠左的还没打饭的人 以及它身后7个人的状态 以及上一个打饭的人是谁 因为他左面的就都打过了 右面7个人以后肯定还没打 可以设f[ ...