Java工具之上传文件
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工具之上传文件的更多相关文章
- Java Web之上传文件
本篇文章你会学到 1. Apache FileUpload组件 2.上传文件保存的路径和名称问题 3.缓存大小和临时目录 4.控制文件上传的格式 先讲一个简单的例子,一个注册页面,有账号,邮箱,和头像 ...
- java socket之上传文件
一.功能介绍 该功能主要实现,将客户端的:F:/work/socketSample/filetemp/client/test_client.txt上传到服务端F:/work/socketSample/ ...
- Java ftp上传文件方法效率对比
Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...
- java 后台上传文件
java 后台上传文件 public static String uploadFile(File file, String RequestURL) throws IOException { Strin ...
- Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument
Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...
- Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
- selenium测试(Java)--上传文件(十五)
1. 当页面中是通过input标签实现上传功能时,可以使用selenium来上传功能. 如下: package com.test.upload; import java.io.File; import ...
- java(SSM)上传文件到七牛云(对象存储)
项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云.这里的思路很简单, 就是移动端.pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后, 将文件上传到七牛云, ...
- java+web上传文件夹内的所有文件
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...
随机推荐
- BZOJ2176Strange string——最小表示法
题目描述 给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的SS的字串中最小的(字符串的比较), 则称T为”奇怪的字串”. 你的任务 ...
- BZOJ3730震波——动态点分治+线段树(点分树套线段树)
题目描述 在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i].不幸的是,这片土地常常发生地震,并且随着时代的发展,城市 ...
- 对strom的理解
1.什么是strom: storm是一个分布式实时计算系统,用户只需要提供自己的插件(例如一个jar包,其中编写用户自己的逻辑代码),然后将它部署到storm服务器上,storm的master服务器就 ...
- django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
报错现象 django 启动的时候报错 django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. 报错解决 记不清是我有毛 ...
- 洛谷P4907【CYH-01】小奔的国庆练习赛 :$A$换$B$ $problem$(DFS,剪枝)
洛谷题目传送门 顺便提一下题意有一个地方不太清楚,就是如果输出No还要输出最少需要添加多少张牌才能满足要求.蒟蒻考完以后发现四个点Too short on line 2... 比较需要技巧的搜索 既然 ...
- 【BZOJ5293】[BJOI2018]求和(前缀和,LCA)
[BZOJ5293][BJOI2018]求和(前缀和,LCA) 题面 BZOJ 洛谷 题解 送分题??? 预处理一下\(k\)次方的前缀和. 然后求个\(LCA\)就做完了?... #include& ...
- Nowcoder | [题解-N165]牛客网NOIP赛前集训营-普及组(第二场)
啊...表示一大早还没睡醒就开始打比赛(开始前一分钟的我还在桌子上趴着休眠)...表示题目思路清奇(尤其C题)...但是我还是太蒻了...\(D\)题暴力都没打...题解正式开始之前先\(\%\)一下 ...
- [算法进阶0x10]基本数据结构C作业总结
t1-Supermarket 超市利润 题目大意 给定n个商品,每个商品有利润pi和过期时间di.每天只能卖一个商品,过期商品不能卖.求如何安排每天卖的商品可以使收益最大. 分析 一开始打了一个复杂度 ...
- Speech语音播报
System.Speech 这个命名空间,报可以阅读文字和播放音频. 环境 W10 VS2017 CMMT 1.添加程序集引用 System.Speech 2.实例化播音类,并且播放一个文本 Spe ...
- 关于一些没做出来的SBCF题
这里是一些我SB没做出来的CF水题. 其实这些题思维量还不错,所以写在这里常来看看…… 不一定每题代码都会写. CF1143C Queen 其实只要注意到如果一个点开始能被删,那一直就能被删:一个点开 ...