SmartUpload文件上传组件的使用教程
在项目中使用SmartUpload组件可以进行文件的上传和下载操作
使用步骤
1.导入jar包,进行build path操作
2.编写文件上传页面,代码如下
<form action="smartupload.jsp" method="post" enctype="multipart/form-data">
请选择要上传的文件:<input type="file" name="pic">
<input type="submit" value="上传">
</form>
3.建立upload文件夹,文件夹在web跟目录下:
4.实例化SmartUpload对象:
5.初始化上传操作;
6.准备上传
7.保存文件
代码如下:
<%
//1.实例化SmartUpload对象
SmartUpload smart=new SmartUpload();
//2.初始化上传操作
smart.initialize(pageContext);
//3.上传准备
smart.upload();
//保存文件
smart.save("upload");
%>
单是现在出现一个问题,表单使用enctype="multipart/form-data"进行了二进制的封装,无法使用request.getParameter()方法获取值了,而是二进制的byte流了.
上传页面代码如下:
<form action="smartupload.jsp" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="uname"><br/>
照片:<input type="file" name="pic"><br/>
<input type="submit" value="上传">
</form>
处理请求页面的代码如下:
<%
//1.实例化SmartUpload对象
SmartUpload smart=new SmartUpload();
//2.初始化上传操作
smart.initialize(pageContext);
//3.上传准备
smart.upload();
//保存文件
smart.save("upload");
request.setCharacterEncoding("UTF-8");
%>
<%="姓名是"+request.getParameter("uname") %>
使用传统的request.getParameter("uname") 已经无法获取到用户输入的信息类.
这个时候如果想要获取表单中的请求值,只有使用SmartUpload中的方法getRequest.getParameter()方法进行获取
处理页面代码如下:
<%
//1.实例化SmartUpload对象
SmartUpload smart=new SmartUpload();
//2.初始化上传操作
smart.initialize(pageContext);
//3.上传准备
smart.upload();
//保存文件
smart.save("upload");
String name=smart.getRequest().getParameter("uname");
name=new String(name.getBytes(),"UTF-8");
%>
<%="姓名是"+name %>
但是现在发现另一个问题,我们多次上传一个文件,我们的文件夹里面始终就保存了一个,文件本身的覆盖导致的,
解决方法,为我们上传的文件自动命名
1.IP+时间戳+三位随机数
建立一个类,专门完成文件自动命名
处理文件保存页面的代码如下:
<%
//1.实例化SmartUpload对象
SmartUpload smart=new SmartUpload();
//2.初始化上传操作
smart.initialize(pageContext);
//3.上传准备
smart.upload();
//获取客户端的 IP地址
String ip=request.getRemoteAddr();
/*IpTimeStamp是自己定义的一个类,类
中有一个获得(IP+时间戳+三位随机数)字符串的方法*/
IpTimeStamp its=new IpTimeStamp(ip);
/*获取文件的扩展名.smart.getFiles()是获取我们上传的多
个文件,getFile(0).这里面的0是下标getFileExt()是获取文件的扩展名*/
String ext =smart.getFiles().getFile(0).getFileExt();
//拼接文件名称
String fileName=its.getIpTimeRand()+"."+ext;
//java.io.File.separator是系统分隔符,win7是"\" 这是将文件保存为什么名字
smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator+fileName);
String name=smart.getRequest().getParameter("uname");
name=new String(name.getBytes(),"UTF-8");
//保存文件
smart.save("upload");
%>
<%="姓名是"+name %>
如果想要限制用户上传文件的扩展名
假如我们一次性上传多个文件,可以使用getFiles()来获取我们上传的文件getFiles()方法返回的是一个数组
smart.getFiles().getFile(0).getFileName()//获取文件名
//matchs()是String的方法,用来匹配正则表达式
通过smart.getFiles().getFile(0).getFileName().matches(“^\\w+.(jpg|gif)$”) 来对上传的文件进行验证,后缀匹配,form表单才能提交.
文件的批量上传:
需要用到smart的方法,getCount();来获取上传来多少个文件
例如:smart.getFiles().getCount(),来获取批量上传的文件数量.再使用for循环来对文件进行重命名和保存的操作
SmartUpload文件上传组件的使用教程的更多相关文章
- Atitit..文件上传组件选型and最佳实践总结(3)----断点续传控件的实现
Atitit..文件上传组件选型and最佳实践总结(3)----断点续传控件的实现 1. 实现思路:::元插件,元设置... 1 2. 实现流程downzip,unzip,exec 1 3. Zip ...
- Atitit..文件上传组件选型and最佳实践总结(2)----断点续传
Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 如何判断一个插件/控件是否支持断点续传?? 1 3. 常用的组件选型结果::马 1 4. 自定 ...
- 异步文件上传组件 Uploader
Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘 ...
- 多文件上传组件FineUploader使用心得
原文 多文件上传组件FineUploader使用心得 做Web开发的童鞋都知道,需要经常从客户端上传文件到服务端,当然,你可以使用<input type="file"/> ...
- ASP中文件上传组件ASPUpload介绍和使用方法
[导读]要实现该功能,就要利用一些特制的文件上传组件.文件上传组件网页非常多,这里介绍国际上非常有名的ASPUpload组件 1 下载和安装ASPUpload 要实现该功能,就要利用一些特制的文件上 ...
- Atitit..文件上传组件选择and最佳实践的总结(2)----HTTP
Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 怎样推断一个插件/控件是否支持断点续传?? 1 3. 经常使用的组件选型结果::马 1 4. ...
- 文件上传组件FileUpload 以及邮箱搭建JavaMail
文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: 1 ...
- Baidu WebUploader 前端文件上传组件的使用
简介 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流I ...
- BootStrap fileinput.js文件上传组件实例代码
1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...
随机推荐
- BZOJ1146[CTSC2008]网络管理——出栈入栈序+树状数组套主席树
题目描述 M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条 ...
- 【题解】 bzoj1076: [SCOI2008]奖励关 (装压+期望dp)
题面戳我 Solution 并不会做,看了下题解大概了解了.期望这个东西好难搞啊qwq 我们定义\(dp[i][j]\)表示第\(i\)步,拿到宝物前的状态为\(j\). 正着来会有很多不合法的情况, ...
- python 和 scikit-learn 实现垃圾邮件过滤
文本挖掘(Text Mining,从文字中获取信息)是一个比较宽泛的概念,这一技术在如今每天都有海量文本数据生成的时代越来越受到关注.目前,在机器学习模型的帮助下,包括情绪分析,文件分类,话题分类,文 ...
- WC 2019 记
“在下一次挑战来临时,还能否有足够的勇气和力量重新提起这被震掉两次的剑呢?” 难得来参加一次$WC$,这是第一次来,也很有可能是最后一次了(我也好希望有下一次啊,哪怕这可能再渺小,如同浩瀚星空中一丝辰 ...
- Haproxy Mysql cluster 高可用Mysql集群
-----client-----------haproxy---------mysql1----------mysql2------192.168.1.250 192.168.1.1 192.168. ...
- SQL中on条件与where条件的区别
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户. 在使用left jion时,on和where条件的区别如下: 1.on条件是在生成临时表时使用 ...
- android关闭日志
我们在开发时,经常会输出各种日志来debug代码.但是等到应用发布的apk运行时不希望它输出日志. 关闭输出日志Log.v(),Log.i(),Log.w(),Log.v(),Log.e()等 原理: ...
- Tyvj 1518 CPU监控——极恶线段树
题目大意: 给定一个区间及其各个元素的初值,要求支持如下操作: 1.区间加 2.区间赋值 3.查询区间最大值 4.查询区间历史最大值 分析: 容易想到线段树,但是细思恶极(仔细想想恶心到了极点)的是, ...
- MATLAB:图像选取局部区域滤波(roicolor、roipoly、roifill、fspecial、roifilt2函数)
对于某些特殊的图像处理,我们不希望将整张图都进行图像处理.这个时候就用到了roicolor.roipoly.roifill.fspecial.roifilt2函数.代码实现过程如下: close al ...
- java操作redis集群配置[可配置密码]和工具类
java操作redis集群配置[可配置密码]和工具类 <dependency> <groupId>redis.clients</groupId> & ...