在项目中使用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文件上传组件的使用教程相关推荐

  1. 1.6 文件上传组件

    1.6 文件上传组件 1.6.1 基本形制 <input type="file" name="myfile"/> form的完整形制如下,它必须设定 ...

  2. Bootstrap fileinput.js,最好用的文件上传组件

    本篇介绍如何使用bootstrap fileinput.js(最好用的文件上传组件)来进行图片的展示,上传,包括springMVC后端文件保存. 一.demo   二.插件引入 <link ty ...

  3. fileinput 时间_JavaScript_Bootstrap Fileinput文件上传组件用法详解,最近时间空余,总结了一些关...

    最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到phpstudy平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的 ...

  4. ASP中文件上传组件ASPUpload介绍和使用方法

    [导读]要实现该功能,就要利用一些特制的文件上传组件.文件上传组件网页非常多,这里介绍国际上非常有名的ASPUpload组件 1 下载和安装ASPUpload   要实现该功能,就要利用一些特制的文件 ...

  5. Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?

    在最初的 http 协议中,没有上传文件方面的功能.RFC1867("Form-based File Upload in HTML".) 为 http 协议添加了这个功能.客户端的 ...

  6. 关于element-ui的upload文件上传组件的使用技巧总结

    关于element-ui的upload文件上传组件的技巧总结 简单说几点: uploader组件使用中的几个常见问题和解答 upload文件类型.大小的筛选: 多文件上传的配置: 3.文件列表的相关操 ...

  7. 多文件上传组件FineUploader使用心得

    原文 多文件上传组件FineUploader使用心得 做Web开发的童鞋都知道,需要经常从客户端上传文件到服务端,当然,你可以使用<input type="file"/> ...

  8. layui多文件上传讲解_Laravel 使用 layui 文件上传组件批量上传图片

    摘要 Laravel 使用 layui 文件上传组件批量上传图片. layui是一款经典国产模块化前端UI框架,首先看看官方的介绍: layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI ...

  9. vue 文件上传组件封装

    增加图片缩略图以及Word.txt文档在线预览 文件上传组件完整代码 <template><div><el-uploadclass="upload-demo&q ...

最新文章

  1. [转]Android横竖屏切换解决方案
  2. struct用法_精讲响应式webclient第1篇-响应式非阻塞IO与基础用法
  3. Linux centos 集群下ssh无密码
  4. 2015年科技巨头的十个开源产品,不只是.NET、Swift
  5. Python中变量作用域问题
  6. ssh 错误: ssh_exchange_identification
  7. 大数据(11) - kafka的安装与使用
  8. 重定向 12 21 解析
  9. 让 Chrome 崩溃的一行 CSS 代码
  10. AWS CEO Andy Jassy 专访:我们一直思考的是未来 2-5 年的事 | 人物志
  11. 大学生代跑全新简洁界面单页官网
  12. 南京大学开源!ResT:高效Transformer架构!
  13. windows10中git-bash闪退的解决办法
  14. linux将屏幕输出内容转储到文件,Linux实时将所有输出重定向到文件
  15. 软件测试用例质量不高?我教你如何编写高质量的测试用例!
  16. HDU-1251-统计难题(字典树)
  17. (转)初识suse——linux
  18. java action url,Java ViewHandler.getActionURL方法代码示例
  19. 懵圈了,面试官问一个 TCP 连接可发多少个 HTTP 请求?
  20. vlan端口的三种模式和基本配置

热门文章

  1. python一行没写完用什么隔离_在CherryPy中请求隔离是如何工作的。我不明白基本的想法...
  2. 无法启动程序 计算机丢失QT,Win7系统打开程序提示计算机中丢失qt5core.dll如何解决...
  3. MSE与MAE的区别与如何选择
  4. 记录运行gpu错误及解决方案
  5. java第七章多线程_第七章 多线程
  6. python接口返回json处理_python 接口返回的json字符串实例
  7. 信息系统项目管理师学习方法
  8. Failed to convert property value of type java.lang.String to required type java.lang.Integer for pro
  9. Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符
  10. 信息系统项目管理师-论文专题(一)论文写作框架+10大管理关系