柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

    • Tomcat
    • JavaWeb Servlet
    • JSP
    • 过滤监听器
    • 会话跟踪
    • MVC设计模式
    • Ajax
    • JSON
    • JspSmartUpload应用
      • 文件上传
      • 文件下载
      • 代码实例
  • 拓展技术

  • 框架技术

  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

  • SpringBoot

  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • JavaWeb
柏竹
2020-02-18
目录

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

# 文件上传

实现步骤:

  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"== (以二进制形式处理表单元素)

  • 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

  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 {
    @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();
        */
    }
}
#Jsp
上次更新: 2023/03/12, 00:43:49

← JSON Java设计模式→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式