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 ...
随机推荐
- C++ 类的静态成员变量及静态成员函数
ps:下面所说 成员=成员变量+成员函数: 作用 由于对象与对象之间的成员变量是相互独立的.所以要想共用数据,则需要使用静态成员和静态函数. 空间分配 静态成员是在程序编译时分配空间,而在程序结束时释 ...
- 设计模式之工厂模式(c++)
问题描述 在面向对象系统设计中经常可以遇到以下的两类问题:1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明 ...
- 关于mybatis的@Param注解和参数
1,使用@Param注解 当以下面的方式进行写SQL语句时: @Select("select column from table where userid = #{userid} " ...
- html5 简介
html5基于html.html dom.xhtml的新版本. 为html5建立的一些新规则: 基于html.dom.xhtml和javascript: 减少对外部插件的需求,比如flash: 更多取 ...
- js timeout
setTimeOut(“”,毫秒):調用函數時,不是立刻執行,而是間隔一定的時間后在執行: clearTimeOut():清除計時器
- python之datetime类
datetime.time时间类,一般用于显示当地时间 import datetime # 新建对象 datetime_obj = datetime.time(hour=12, minute=20, ...
- selenium之封装登陆操作
# selenium 封装登录操作举例 import os, time # from selenium import webdriver class LoginPage(): '''登录模块''' d ...
- SQL语言分类DQL,DML,DDL,DCL,DTL
SQL语言共分为五大类: 数据查询语言DQL 数据操纵语言DML 数据定义语言DDL 数据控制语言DCL 数据事物语言DTL DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WH ...
- cf983E NN Country (倍增+dfs序+树状数组)
首先可以求出从某点做$2^k$次车能到的最浅的点,这个只要dfs一下,把它的孩子能到的最浅的点更新过来就可以 然后倍增地往上跳,不能跳到lca的上面,记录坐车的次数ans 此时有三种情况(设最远能跳到 ...
- 端午漫谈(附:Ubuntu18.04下轻量截图软件)
先说声端午快乐- 有空就陪陪家人吧.今天陪外公吃了顿饭,陪老人家聊了会天,颇有点感触.发现技术真的是改变生活,小孩抖音自学跳舞,大人微信刷又刷,很多天海一方的老朋友都可以联系到了... 其实最有感触的 ...