SmartUpload组件简介
- SmartUpload组件
- 专门用于实现文件上传及下载的免费组件
- SmartUpload组件特点
- 使用简单:编写少量代码,完成上传下载功能
- 能够控制上传内容
- 能够控制上传文件的大小、类型
- 缺点:目前已停止更新服务
SmartUpload组件应用
- 单文件上传
- 混合表单上传
- 多文件上传
- 控制上传文件的格式
- 设定文件上传的大小
SmartUpload组件应用条件
- 环境准备
- 使用SmartUpload组件需要在项目中引入jspsmartupload.jar文件
- 将jspsmartupload.jar 添加到WEB-INF\lib目录下
- 需要设置表单的enctype属性
- <form enctype="multipart/form-data" method="post">
- 使用SmartUpload组件需要在项目中引入jspsmartupload.jar文件
设置了enctype属性后, 表单必须以post方式提交(文件的提交方式必须是post)
SmartUpload类及方法
- SmartUpload类
属性名称 | 说明 |
public final void initialize(PageContext pageContext) | 执行上传和下载的初始化工作,必须实现 |
public void upload() | 实现文件数据的上传,在initialize方法后执行 |
public int save(String pathName) | 将全部上传文件保存到指定的目录下,并返回保存的文件个数 |
public void setAllowFilesList(String ExtList) | 指定允许上传的文件扩展名,接收一个扩展名列表,以逗号分隔 |
public void setDeniedFilesList ( String fileList) | 指定了禁止上传的文件扩展名列表,每个扩展名之间以逗号分隔 |
public void setMaxFileSize(long filesize) | 设定每个文件允许上传的最大长度 |
public void setTotalMaxFileSIze(long totalfilesize) | 设定允许上传文件的总长度 |
Files类及方法
- Files类
- 封装了所有上传文件的信息集合
- 常用方法
属性
属性名称 | 说明 |
public int getCount() | 取得文件上传的数目 |
public File getFile(int index) | 取得指定位置的File文件对象 |
public long getSize() | 取得上传文件的总长度 |
public Files getFiles() | 将所有上传文件对象以Collection的形式返回 |
方法
方法名称 | 说明 |
saveAs(String destFilePathName) | 将文件保存,参数destFilePathName是保存的文件名 |
isMissing( ) | 判断用户是否选择了文件,即对应表单项是否为空,返回值为boolean类型 |
public String getFiledName( ) | 获取表单中当前上传文件所对应的表单项的名称 |
public String getFileName( ) | 获取上传文件的文件名称,不包含路径 |
单文件上传的实现
第一步:创建一个JavaWeb项目,配置pom.xml文件,导入SmartUpload组件的jar包
因为我们创建的是一个maven项目,如果在使用直接在项目中添加lib的方式导包就不太合适了,所以应该将jar包交给maven统一管理,但是SmartUpload组件已经停止更新了,我们无法从中央仓库拉取对应的jar包,所以我们需要手动添加jar包到本地仓库
百度网盘:SmartUpload的jar包
阿里云盘:SmartUpload的jar包
1.首先在idea中创建一个JavaWeb项目
可以在External Libraries中查看我们添加到库中的jar包。(因为我的项目已经添加过smartuploadjar包了,所以在这里显示了)
2.配置pom.xml,并在本地仓库添加smartuplaod的jar包
打开本地的maven仓库
添加文件夹层级(在maven中,每个groupId、artifactId和version都是一个文件夹,jar包被一层一层的放在这些文件夹中,目的是区分不同的jar包)
本地资源管理器:
pom.xml中的写法:
完整的pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>fileupload_demo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>fileupload_demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>smartupload</groupId>
<artifactId>smartupload</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>D:/maven/maven-3.9.9/repository/smartuplaod/smartupload/1.0/smartupload.jar</systemPath>
</dependency>
</dependencies>
<build>
<finalName>huihua_0914</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.14.v20161028</version>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8080</port>
<path>/my_maven_pro</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
</project>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
</web-app>
第二步:创建文件上传页面
up.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/up" enctype="multipart/form-data" method="post">
<input type="file" name="up" id="up"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
第三步:创建处理文件上传请求的Servlet类
UploadServlet
package servlet;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;
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("/up")
public class UploadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
SmartUpload sm =new SmartUpload();
sm.initialize(this.getServletConfig(),request,response);
sm.setCharset("UTF-8");
try {
sm.upload();
sm.save("/upfiles");
} catch (Exception e) {
e.printStackTrace();
}
}
}
手动创建一个upfiles文件夹用来保存上传的文件
单文件上传测试
选择文件
提交文件,并查看upfiles文件夹
总结
以上就是借助SmartUpload组件实现文件上传功能的简单实现。重点理解如果在maven项目中导入一个中央仓库不存在的jar包