基于SmartUpload组件实现文件上传功能的案例

SmartUpload组件简介

  • SmartUpload组件
    • 专门用于实现文件上传及下载的免费组件
  • SmartUpload组件特点
    • 使用简单:编写少量代码,完成上传下载功能
    • 能够控制上传内容
    • 能够控制上传文件的大小、类型
    • 缺点:目前已停止更新服务

 SmartUpload组件应用

  • 单文件上传
  • 混合表单上传
  • 多文件上传
  • 控制上传文件的格式
  • 设定文件上传的大小

SmartUpload组件应用条件

  • 环境准备
    • 使用SmartUpload组件需要在项目中引入jspsmartupload.jar文件
      • 将jspsmartupload.jar 添加到WEB-INF\lib目录下
    • 需要设置表单的enctype属性
      • <form enctype="multipart/form-data" method="post">

设置了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/javaeehttp://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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected 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包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1539206.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】多线程前置知识 初识Thread

多线程前置知识 & 初识Thread 冯诺依曼体系结构初步认识存储设备CPU指令 操作系统初识操作系统内核态和用户态 进程/任务进程是什么进程的管理进程的调度虚拟内存地址进程间的通信 线程线程的出现线程是什么线程可能出现的问题线程与进程的联系和区别 协程初识Thread类Thre…

Java lambda表达式的变量捕获

有人看到这个lambda表达式能够访问isQuit这个变量而且还是可以被修改的变量&#xff0c;就发出疑问了&#xff0c;之前不是说lambda不能不或变量吗&#xff1f; 1.规则 java的lambda表达式变量捕获规则只是针对于外部作用域的局部变量来说的&#xff01;&#xff01;&#xf…

Linux环境变量进程地址空间

目录 一、初步认识环境变量 1.1常见的环境变量 1.2环境变量的基本概念 二、命令行参数 2.1通过命令行参数获取环境变量 2.2本地变量和内建命令 2.3环境变量的获取 三、进程地址空间 3.1进程&#xff08;虚拟&#xff09;地址空间的引入 3.2进程地址空间的布局和理解 …

【机器学习】:深潜智能的底层逻辑、前沿探索与未来展望】

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 在科技的浩瀚星空中&#xff0c;机器学习犹如一颗璀璨的新星&#xff0c;以其独特的魅力和无限潜力&#xff0c;引领着我们向智能的深处探索。今天&#xff0c;我们将一同踏上这场深度之旅&#xff0c;不仅解析…

pdf图片怎么提取出来?这6个pdf图片提取工具全搞定,值得推荐!

在我们的日常办公和学习中&#xff0c;pdf文件成为了信息传递的重要载体。然而&#xff0c;有时我们在pdf文档中发现一些精彩的图片&#xff0c;想将其提取出来供个人使用或分享给他人。无论是为了更灵活的处理&#xff0c;还是为了发送特定的图像&#xff0c;提取pdf中的图片都…

国产新港海岸NCS8622Type-C/DP1.4 to HDMI2.0 Converter

NCS8622是一款高性能低功耗的Type-C/DP1.4至HDMI2.0转换器&#xff0c;设计用于将USB Type-C源或DP1.4源连接到HDMI2.0。
 NCS8622集成了符合DP1.4标准的接收器和符合HDMI2.0标准的发射器。 此外&#xff0c;CC控制器用于CC通信以实现DP替代模式。
 DP接收器集成了HDCP 1.…

gazebo 仿真阶段性问题汇总二

目录 写在前面的话遇到的问题问题一&#xff1a;启动了多个 robot_state_publisher解决办法 问题二&#xff1a;rviz 启动报错解决办法 问题三&#xff1a;rviz 中 wheel 一直指向 base_link解决方法 问题四&#xff1a;摄像头和opencv坐标系的问题解决方法 问题五&#xff1a;…

Submariner 部署全过程

Submariner 部署全过程 部署集群配置 broker 集群&#xff1a; pod-cidr&#xff1a;11.244.0.0/16 service-cidr 11.96.0.0/12 broker 172.100.0.109 node 172.100.0.108 集群 1&#xff08; pve3 &#xff09;&#xff1a; pod-cidr&#xff1a;10.244.0.0/16 service-…

微信支付开发-支付工厂JsApi产品代码

一、JSAPI支付产品、APP支付产品、小程序支付产品流程图 二、H5支付产品、Native支付产品 三、工厂父类抽象类代码开发 <?php /*** 微信父类抽象类* User: 龙哥三年风水* Date: 2024/9/19* Time: 11:33*/ namespace Payment\WechatPay; abstract class WechatPaymentHandl…

翻页时钟 2.0-自动置顶显示,点击小时切换显示标题栏不显示标题栏-供大家学习研究参考

更新内容 自动置顶显示点击小时切换显示标题栏&#xff0c;&#xff08;显示标题栏后可移动时钟位置&#xff0c;鼠标拖动边框调整时钟大小&#xff09;不显示标题栏时&#xff0c;透明部分光标可穿透修正一个显示bu 下载地址&#xff1a; https://download.csdn.net/download…

一站式项目管理系统如何实现全链条数字化管理?

在当今数字化高速发展的时代&#xff0c;项目申报领域也面临着管理方式的革新挑战。从传统的人工管理到如今追求高效、精准的数字化管理模式转变&#xff0c;是行业发展的必然趋势。如启服云项目管理系统之类的出现&#xff0c;为项目申报管理带来了新的思路。 立项阶段的数字化…

假期学习笔记总结--iOS 自动释放池

iOS 自动释放池 https://juejin.cn/post/6844904094503567368#heading-23 ARC和MRC 苹果在 iOS 5 中引入了ARC&#xff08;Automatic Reference Counting&#xff09;自动引用计数内存管理技术&#xff0c;通过LLVM编译器和Runtime协作来进行自动管理内存。LLVM编译器会在编…

怎么把图片压缩变小?把图片压缩变小的八种压缩方法介绍

怎么把图片压缩变小&#xff1f;在当今这个信息高度共享的时代&#xff0c;图片不仅仅是简单的视觉元素&#xff0c;它们承载着我们的记忆、故事和创意。无论是旅行的风景、家庭的聚会&#xff0c;还是工作中的项目展示&#xff0c;图片都在我们的生活中扮演着不可或缺的角色。…

文达通从创业板、北交所转战港股:净利润下滑,资产负债率124%

《港湾商业观察》施子夫 8月13日&#xff0c;青岛文达通科技股份有限公司&#xff08;以下简称&#xff0c;文达通&#xff09;递表港交所获受理&#xff0c;联席保荐机构为山证国际、浤博资本。 在选择递表港交所前&#xff0c;文达通曾于新三板挂牌上市并且还曾尝试谋求创业…

智谱清影 -CogVideoX-2b-部署与使用,带你揭秘生成6s视频的极致体验!

文章目录 1 效果展示2 CogVideoX 前世今生3 CogVideoX 部署实践流程3.1 创建丹摩实例3.2 配置环境和依赖3.3 模型与配置文件3.4 运行4 遇到问题 1 效果展示 A street artist, clad in a worn-out denim jacket and a colorful bandana, stands before a vast concrete wall in …

产品:直播送礼延迟这么大,你就不能快点吗

先赞后看&#xff0c;南哥助你Java进阶一大半 其实抖音的实时音视频技术RTC&#xff0c;是来源于火山引擎RTC的支持&#xff0c;抖音、火山引擎、巨量引擎都属于字节旗下不同的业务板块。 我是南哥&#xff0c;一个Java学习与进阶的领路人。 相信对你通关面试、拿下Offer进入心…

俄罗斯电商Ozon实用运营工具推荐

想要在俄罗斯最大的跨境电商平台 Ozon 上大展拳脚&#xff0c;却对俄语感到无从下手&#xff1f;又或是担心难以把握俄罗斯市场的热点趋势&#xff1f;别担心&#xff01;在这篇文章中&#xff0c;我们将为你介绍一系列实用工具&#xff0c;涵盖翻译、运营和图片处理等方面&…

有源滤波器UAF42

有源滤波器模块&#xff0c;在电路板上同时实现了低通&#xff0c;高通&#xff0c;带通 滤波器&#xff0c;可选其一进行输出&#xff0c;并可通过改变滑变阻值&#xff0c;轻松调节其滤波器中心频率&#xff0c;Q值&#xff0c;通带增益等&#xff0c; 也可方便实现Butterwo…

深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这次目标本来要达到60%&#xff0c;但是却非常稳定的达到了40%&#xff0c;​&#x1f622;​​&#x1f622;​​&#x1f622;​​&#x1f622;​&am…

实战17-NavBar+Vip布局

NavBar.ets import { PADDING } from ../../constants/size import rvp from ../../utils/resposive/rvIndexComponent export default struct NavBar {StorageProp(topHeight) topHeight: number 0;build() {Row() {Row({ space: rvp(6) }) {Text(请选择地址).fontSize(rvp(1…