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 ...
随机推荐
- php开发APP接口(总结一)
一.什么是app接口:服务端与客户端的数据交互. 大部分APP接口是通过http协议通信的. http通信的三要素: URL: 通信的地址 Method:通信的方式(get | post | pu ...
- HTTP消息头(HTTP headers)-常用的HTTP请求头与响应头
HTTP消息头是指,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,协议头部分的那些组件.HTTP消息头用来准确描述正在获取的资源.服务器或 ...
- jquery 語法
基本形式: $(selector).action() 文檔加載函數: $(document).Ready{ function(){ //將所有的函數寫到文檔加載函數里,可以防止頁面未加載完全,就執行j ...
- js簡介
js是腳本語言: js適用於服務器.pc.平板電腦.智能手機: js是最流行的編程語言,使用與html和前段: js是一種輕量級編程語言: js能被所有的現代瀏覽器執行: js和java是完全不同的編 ...
- Java之byte、char和String类型相互转换
package basictype; /** * byte.char和String类型相互转换 */ public class CHJavaType { public static void main ...
- HTML5-表单元素
不是所有的浏览器都支持HTML5新的表单元素,但是可以使用他们,即使浏览器不支持表单属性,仍然可以显示为常规的表单元素 datalist 规定输入域的选项列表 //input的list属性值就是dat ...
- Django前端获取后端数据之前端自定义函数
在写网站的时候遇到了一个问题: Django在后端向前端传数据时,多数会使用dict字典来传送多个数据,但前端只能遍历,没有一个用key取到value值的方法可以直接使用 如果作为一个list传递到前 ...
- instanceof判断的对象可以是接口
instanceof是Java的一个二元操作符(运算符) 用法 boolean result = object instanceof class instanceof通过返回一个布尔值来指出,这个对象 ...
- 修改 wordpress 后台管理员登录地址
拷贝根目录下的 wp-login.php文件命名为wp-login.php.backup,把原文件重命名为managewp.phpsed -i "s/wp-login.php/managew ...
- 【BZOJ2208】[JSOI2010]连通数(Tarjan)
[BZOJ2208][JSOI2010]连通数(Tarjan) 题面 BZOJ 洛谷 题解 先吐槽辣鸡洛谷数据,我写了个\(O(nm)\)的都过了. #include<iostream> ...