JspSmartUpload应用
# JspSmartUpload应用
jspSmartUp是一种早期流行的使用框架,适合于上传小型的文件,具有灵活性简单高效。 使用方法很简单
# File
File类 包装上传文件的所有信息。通过 File类
可 获取/设置 文件的相关信息
常用方法
返回 | 方法 | 说明 |
---|---|---|
boolean | isMissing() | 判断文件是否对应表单的 |
void | saveAs(String url, int type) | 将文件进行保存 |
String | getFieldName() | 获取 文件的表单name属性值 |
String | getFileName() | 获取 上传文件名称 |
String | getFilePathName() | 获取 文件全名 |
long | getSize() | 获取 文件长度(字节) |
String | getFileExt() | 获取 文件扩展名 |
void | setCharset(String charset) | 设置 编码字符集 |
# Files
Files类表示所有上传文件的集合
常用方法
返回 | 方法 | 说明 |
---|---|---|
void | addFile(File newFile) | 添加 新文件进集合 |
int | getCount() | 获取 上传文件的个数 |
long | getSize() | 获取 上传文件大小(字节) |
File | getFile(int index) | 获取 指定文件 |
# Request
Request类表示文件上传表单,request对象
无法获得表单中的name属性值,必须通过依赖包里的 com.jspsmart.upload.Request对象
来获取name属性值
常用方法
返回 | 方法 | 说明 |
---|---|---|
String | getParameter(String name) | 获取 指定表单name属性值的value值 |
String[] | getParameterValues(String name) | 获取 指定表单name属性值的多个value值 |
# SmartUpload
常用方法
返回 | 方法 | 说明 |
---|---|---|
void | initialize() | 上传和下载的初始化配置 |
void | upload() | 上传操作,在初始化配置后执行 |
int | save(String pathName) | 上传保存后,返回保存文件数 |
void | setContentDisposition(string contentdisposition) | 提示文件是否添加额外信息contentdisposition参数: Content-Disposition、attachment == null (效果一样) |
void | downloadFile(String url) | 指定下载路径的文件 |
Files | getFiles() | 获取 上传的所有文件 |
Request | getRequest() | 获取 上传表单请求数据 |
void | setMaxFileSize(long filesize) | 设置 单个文件大小 (字节) |
void | setTotalMaxFileSize(long allfilesize) | 设置 总文件大小 (字节) |
void | setAllowedFilesList(String form) | 设置 限制文件类型(多个类型分号分割) |
# 文件上传
实现步骤:
导入依赖包
实例
SmartUpload对象
(用于创建上传对象)初始化配置上传文件 方式/限制 ,
SmartUpload.initialize()方法
进行初始化配置进行上传文件 ,
SmartUpload.upload()方法
上传文件通过
com.jspsmart.upload.File对象
得到文件,通过以下方式获取名称//····· Files files = smartUpload.getFiles(); File file = files.getFile(0); String fileName = file.getFileName();
对文件进行保存,
File.saveAs()方法
上传保存的位置 保存类型、目录位置是否存在!
注意:
form表单
提交类型为post
form表单
必须添加属性:==enctype="multipart/form-data"== (以二进制形式处理表单元素)
input组件
添加 自定义name属性值
input组件
添加 ==multiple="multiple"== 属性值 可选择多个文件服务端 提取表单数据方式:(因设置了二进制形式获取值的方式也不一样 ==SmartUpload.getRequest().getParameter("name属性值");==
SmartUpload sup = new SmartUpload(); //初始化配置。。。。 String uname = sup.getRequest().getParameter("username");
快速初始化配置
SmartUpload sup = new SmartUpload();
PageContext pageContext = JspFactory.getDefaultFactory()
.getPageContext(this,req,resp,null,false,1024,true);
sup.initialize(pageContext);
JspFactory.getPageContext()方法说明
public abstract PageContext getPageContext(Servlet servlet, ServletRequest req, ServletResponse resp, String errorPageURL, boolean needsSession, int buffer boolean autoflush)
参数 | 说明 |
---|---|
servlet | 请求的servlet,在servlet中传this即可 |
req | servlet上挂起的当前请求 |
resp | servlet上挂起的当前响应 |
errorPageURL | 请求JSP的错误页面的URL,或null |
needsSession | 是否需要session |
buffer | 以字节为单位的缓冲区大小 |
autoflush | 缓冲区溢出时是否 自动刷新到输出流 |
# 文件下载
实现步骤:
方式1
导入依赖包
实例
SmartUpload对象
(用于创建上传对象)初始化配置文件 方式/限制 ,
SmartUpload.initialize()方法
进行初始化配置设置 禁止浏览器自动打开,
SmartUpload.setContentDisposition(null)
获取指定文件路径,和请求中的文件名
//假设:web/test/image.png 、name = image.png String name = req.getParameter("file"); String url = "test/"+name;
下载指定路径文件
SmartUpload.downloadFile(url)
方式2
导入依赖包
获取下载的文件,在请求参数中获取
文件名
设置 响应内容,调用
HttpServletResponse.setContentType()方法
,将响应内容设置为通用的二进制流resp.setContentType("application/octet-stream");
添加响应头,调用
HttpServletResponse.addHeader()方法
设置响应头//...... //配置名称设置编码集 name = URLEncoder.encode(name, StandardCharsets.UTF_8); resp.addHeader("Content-Disposition","attachment;filename="+name);
响应转送下载
//假设路径:web/test/image.png 、name = image.png String url = "test/image.png"+name; req.getRequestDispatcher(url).forward(req,resp);
清空缓存
resp.flushBuffer()
# 代码实例
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>上传</h1>
<form action="upload" method="post" enctype="multipart/form-data">
name: <input type="text" name="userName"> <br>
age: <input type="text" name="userAge"> <br>
image: <input type="file" name="image"> <br>
<input type="submit" value="上传信息">
</form>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>接收Test</h1>
<p>userName: ${userName}</p>
<p>userAge: ${userAge}</p>
<p>image: <a href="download?file=${fileName}">${fileName}</a>(点击下载)</p>
<img src="test/${fileName}">
</body>
</html>
Upload类(上传服务端)
package servlet;
import com.jspsmart.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;
/**
* @Author: 柏竹
* @Description: 一个简洁主义...
* @Date_Created_in: 2021-04-29 16:49
* @Modified_By: Sans
* @Project: 上传服务端
*/
@WebServlet(urlPatterns = "/upload")
public class Upload extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {
doPost(req , resp);
}
@Override
protected void doPost(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {
try {
//实例SmartUpload
SmartUpload upload = new SmartUpload();
//初始化配置SmartUpload
upload.initialize(this.getServletConfig(), req, resp);
upload.setCharset("utf-8");
upload.setAllowedFilesList("jpg,png");
upload.setMaxFileSize(2 * 1024 * 1024);
upload.setAllowedFilesList("jpg,png");
//上传
upload.upload();
//获取文件信息
Files files = upload.getFiles();
File file = files.getFile(0);
String fileName = file.getFileName();
String url = "test/"+fileName;
//保存上传指定目录
file.saveAs(url,1);
//获取表单数据并存储
Request request = upload.getRequest();
req.setAttribute("userName",request.getParameter("userName"));
req.setAttribute("userAge",request.getParameter("userAge"));
req.setAttribute("fileName",fileName);
req.getRequestDispatcher("success.jsp").forward(req,resp);
} catch (SmartUploadException e) {
e.printStackTrace();
}
}
}
Download类(下载服务端)
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;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
* @Author: 柏竹
* @Description: 一个简洁主义...
* @Date_Created_in: 2021-04-29 17:13
* @Modified_By: Sans
* @Project: 下载服务端
*/
@WebServlet(urlPatterns = "/download")
public class Download extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {
doPost(req , resp);
}
@Override
protected void doPost(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("file");
String url = "test/"+name;
System.out.println(url);
//方式1
SmartUpload sup = new SmartUpload();
sup.initialize(this.getServletConfig(), req, resp);
// 设定contentDisposition为null以禁止浏览器自动打开文件
// 保证单击链接后下载文件
sup.setContentDisposition(null);
//指定下载的文件
try {
sup.downloadFile(url);
} catch (SmartUploadException e) {
e.printStackTrace();
}
//方式2
/*
//将响应内容设置为通用的二进制流
resp.setContentType("application/octet-stream");
//attachment 告诉浏览器附件的方式为 下载文件(弹出下载框)
name = URLEncoder.encode(name, StandardCharsets.UTF_8);
resp.addHeader("Content-Disposition","attachment;filename="+name);
req.getRequestDispatcher(url).forward(req,resp);
//清空缓存: 将服务端缓冲区的文件内容,立即权并不传递给客户端
resp.flushBuffer();
*/
}
}