今天给大家讲解在Java中如何使用fileupload组件来快速实现文件、图片的上传,欢迎提出你的疑问
什么是fileupload
由Apache(跟Tomcat是一家的)提供,属于第三方组件。所以使用时,第一步就要导入这个组件的相关jar包
fileupload的思想是怎样的
fileupload 组件可以将所有的请求信息都解析成 Fileltem对象,可以通过对 Fileltem对象 的操作完成上传(也就是使用了面向对象的思想)
怎么使用
-
第一步,要先去官网下载两个jar包,并放入你的工程中,具体位置见下图所示(图中lib文件夹是需要自己手动创建的):
这里给出 jar 包的百度网盘下载连接:链接:https://pan.baidu.com/s/1_GW9nfkubspdjwPprrBZpw
提取码:1234 -
怎么使用?----> 要先拿到 FileItem 对象,怎么拿?
try { //拿FileIteam对象的步骤 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory); List<FileItem> fileItems = servletFileUpload.parseRequest(req); //调方法:解析请求,将所有请求信息转化成一个FileItem的集合 } catch (FileUploadException e) { e.printStackTrace(); }
代码实现文件上传的过程
注意:这里贴出来的 servlet 代码,不包括import和package的部分,只需要粘贴到你的工程中即可。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="upload">
<input type="file" name="fil"/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
@WebServlet("/upload")
public class FileUpload extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
//拿FileIteam对象的步骤
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
List<FileItem> list = servletFileUpload.parseRequest(req); //将所有请求信息转化成一个FileItem的集合
//由于文本也可以存入FileItem对象,所以判断一下是不是文件
for (FileItem fileItem : list) {
if (fileItem.isFormField()) { //文本框为true
String name = fileItem.getFieldName(); //获取input中的name
String value = fileItem.getString("UTf-8"); //获取值,并设置编码格式
} else {
//可以测试一下文件的基本信息
String name = fileItem.getName(); //获取文件名
long size = fileItem.getSize();//获取文件大小,以字节为单位
System.out.println("文件名为:" + name + ";大小为:" + size + "Byte");
//注意这里的区别:因为所以请求都解析成FileItem中了,所以不在是req了
InputStream inputStream = fileItem.getInputStream();
//存入本地
String str = req.getServletContext().getRealPath("file/" + name);
OutputStream outputStream = new FileOutputStream(str);
int temp = 0;
while((temp = inputStream.read())!=-1){ //由于这里没有用字符流封装(也可以封装:用字符),用的是字节,所以是-1
outputStream.write(temp);
}
outputStream.close();
inputStream.close();
System.out.println("上传成功");
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}