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) 设置 限制文件类型(多个类型分号分割)

文件上传

实现步骤:

  1. 导入依赖包

  2. 实例 SmartUpload对象 (用于创建上传对象)

  3. 初始化配置上传文件 方式/限制 ,SmartUpload.initialize()方法 进行初始化配置

  4. 进行上传文件 ,SmartUpload.upload()方法 上传文件

  5. 通过 com.jspsmart.upload.File对象 得到文件,通过以下方式获取名称

    //·····
    Files files = smartUpload.getFiles();
    File file = files.getFile(0);
    String fileName = file.getFileName();
    
  6. 对文件进行保存,File.saveAs()方法 上传保存的位置
    保存类型、目录位置是否存在!

注意:

  • form表单 提交类型为post

  • form表单 必须添加属性:enctype="multipart/form-data"

  • 服务端 提取表单数据方式:
    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

  1. 导入依赖包

  2. 实例 SmartUpload对象 (用于创建上传对象)

  3. 初始化配置文件 方式/限制 ,SmartUpload.initialize()方法 进行初始化配置

  4. 设置 禁止浏览器自动打开,SmartUpload.setContentDisposition(null)

  5. 获取指定文件路径,和请求中的文件名

    //假设:web/test/image.png 、name = image.png
    String name = req.getParameter("file");
    String url = "test/"+name;
    
  6. 下载指定路径文件 SmartUpload.downloadFile(url)

方式2

  1. 导入依赖包

  2. 获取下载的文件,在请求参数中获取 文件名

  3. 设置 响应内容,调用 HttpServletResponse.setContentType()方法 ,将响应内容设置为通用的二进制流

    resp.setContentType("application/octet-stream");
    
  4. 添加响应头,调用 HttpServletResponse.addHeader()方法 设置响应头

    //......
    //配置名称设置编码集
    name = URLEncoder.encode(name, StandardCharsets.UTF_8);
    resp.addHeader("Content-Disposition","attachment;filename="+name);
    
  5. 响应转送下载

    //假设路径:web/test/image.png 、name = image.png
    String url = "test/image.png"+name;
    req.getRequestDispatcher(url).forward(req,resp);
    
  6. 清空缓存 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 {@Overrideprotected void doGet(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {doPost(req , resp);}@Overrideprotected void doPost(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {try {//实例SmartUploadSmartUpload upload = new SmartUpload();//初始化配置SmartUploadupload.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 {@Overrideprotected void doGet(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {doPost(req , resp);}@Overrideprotected void doPost(HttpServletRequest req , HttpServletResponse resp) throws ServletException, IOException {String name = req.getParameter("file");String url = "test/"+name;System.out.println(url);//方式1SmartUpload 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();*/}
}

点击个人实例项目(包含jar)

JavaWeb学习记录 JspSmartUpload应用相关推荐

  1. javaweb学习记录-qqzone项目-结构分析

    回顾下之前学习的水果项目的mvc各层设计 qqzone项目结构 几个问题及分析 3. 系统启动时,我们访问的页面是: http://localhost:8080/pro23/page.do?opera ...

  2. javaWeb学习记录:学生信息管理系统

    初始版 初始版是没有加分页的.因为没怎么学过前端,界面很丑陋.主要技术:JSP,JavaBean,servlet,JDBC主要页面如下: 登录页面 主页 添加学生 查看所有学生 查询学生 工程目录 数 ...

  3. JavaWeb学习记录(二十五)——权限管理总结

    一.面向对象思想简化数据库操作 public List<Role> getObjectsByIds(List<AdminRole> adminRoles) {          ...

  4. 黑马程序员最新版JavaWeb基础教程最后的案例学习记录

    黑马程序员最新版JavaWeb基础教程最后的案例学习记录这里写自定义目录标题 调试中我遇到的问题 调试中我遇到的问题 若db1报错: 则 改成自己的数据库名称 web.xml报错:则用这一段代码 &l ...

  5. java raw_GitHub - Braw115/JavaWEB: JavaWEB学习之中的一些Demo

    #该仓库主要记录学习javaWEB中一些Demo 1.SSM-Demo 使用maven整合的Spring,SpringMVC,Mybatis的案例,数据库使用mysql,数据源为druid,可以直接拿 ...

  6. gRPC学习记录(六)--客户端连接池

    对于客户端来说建立一个channel是昂贵的,因为创建channel需要连接,但是建立一个stub是很简单的,就像创建一个普通对象,因此Channel就需要复用,也就是说需要实现一个连接池应用.本文使 ...

  7. javaweb学习6——自定义标签

    声明:本文只是自学过程中,记录自己不会的知识点的摘要,如果想详细学习JavaWeb,请到孤傲苍狼博客学习,JavaWeb学习点此跳转 本文链接:https://www.cnblogs.com/xdp- ...

  8. B站狂神说JavaWeb学习笔记

    JavaWeb学习笔记(根据b站狂神说java编写) 1.基本概念 1.1 前言 静态Web: 提供给所有人看数据不会发生变化! HTML,CSS 动态Web: 有数据交互,登录账号密码,网站访问人数 ...

  9. 【javaweb学习笔记】servlet-api,filter和Listener

    javaweb学习笔记 1. servlet-api 1.1 servlet初始化 1.2 ServletContext和context-param 2. 什么是业务层 3. IOC 3.1 耦合/依 ...

最新文章

  1. 51单片机c语言运算符,51单片机表达式语句的用法解析
  2. apche 虚拟主机设置
  3. ceph编译_Ceph编译:L版本及其之后的版本
  4. 这里有一份面筋请查收(五)
  5. 前端学习(2740):重读vue电商网站50之Element-UI 组件按需加载
  6. 《程序设计技术》第四章例程
  7. JSON Web Token实际应用
  8. Ubuntu18.04下小米、TPLink、腾达USB无线网卡跳坑记录
  9. 智能会议系统集成解决方案
  10. 【产品】业务流程+任务流程+页面流程绘制指南
  11. Photoshop抠图--使用图层蒙版抠图
  12. Caught FileNotFoundError in DataLoader worker process 0.
  13. java 支付宝帐单_支付宝单笔提现转账到个人用户,java代码实现
  14. python编程案例看电影_转利用python实现电影推荐
  15. ArcGIS JS之 identify接口之 exceededTransferLimit属性
  16. 我国正式实施不安全食品召回制度(转)
  17. 浅谈中国电信出口网络的链路情况(什么是 ChinaNet,CN2,GT,GIA)
  18. 碰撞、子弹路径、参考
  19. 蛋花花谈大学生如何在互联网上赚钱
  20. flask框架----跨域

热门文章

  1. s5p4418添加触摸驱动
  2. 数字经济-新经济指数(2017-2022)31省数字经济测算(2013-2020)两大维度指标
  3. IntelliJ IDEA 2018.3 汉化包
  4. 三秒教会你如何使用scrcpy手机无线投屏到电脑
  5. WinForm控件之【NotifyIcon】
  6. word文档中enter到下一页
  7. Linux 防火墙与NAT服务
  8. 2023届暑期实习京东物流一面
  9. 人人网——正在下沉的巨轮
  10. 电脑开机报警声音原因讲解!