在项目中使用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. Atitit..文件上传组件选型and最佳实践总结(3)----断点续传控件的实现

    Atitit..文件上传组件选型and最佳实践总结(3)----断点续传控件的实现 1. 实现思路:::元插件,元设置... 1 2. 实现流程downzip,unzip,exec 1 3. Zip  ...

  2. Atitit..文件上传组件选型and最佳实践总结(2)----断点续传

    Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 如何判断一个插件/控件是否支持断点续传?? 1 3. 常用的组件选型结果::马 1 4. 自定 ...

  3. 异步文件上传组件 Uploader

    Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘 ...

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

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

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

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

  6. Atitit..文件上传组件选择and最佳实践的总结(2)----HTTP

    Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 怎样推断一个插件/控件是否支持断点续传?? 1 3. 经常使用的组件选型结果::马 1 4.  ...

  7. 文件上传组件FileUpload 以及邮箱搭建JavaMail

     文件上传与下载 1.1 文件上传 案例: 注册表单/保存商品等相关模块! --à 注册选择头像 / 商品图片 (数据库:存储图片路径 / 图片保存到服务器中指定的目录) 文件上传,要点: 前台: 1 ...

  8. Baidu WebUploader 前端文件上传组件的使用

    简介 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流I ...

  9. BootStrap fileinput.js文件上传组件实例代码

    1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...

随机推荐

  1. MongoDB导入导出以及数据库备份以及.dat数据

    1.导出工具:mongoexport     1.概念:         mongoDB中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指 ...

  2. 解决主机ping不通虚拟机

    vmware 08网卡 解决的办法就是 从vmware中,选择菜单:edit->virtual network editor,选择nat,点击左下角的”restore Default“,然后就正 ...

  3. angular4 组件通讯、生命周期

    主要通讯形式 父组件通过属性绑定到子组件,子组件通过事件传递参数到父组件 父组件通过局部变量获取子组件的引用 父组件使用@ViewChild获取子组件的引用 两个不相关联的组件使用中间人模式交互 终极 ...

  4. DOM 操作技术【JavaScript高级程序设计第三版】

    很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...

  5. AtCoder Beginner Contest 118 解题报告

    A - B +/- A #include <bits/stdc++.h> int main() { int a, b; std::cin >> a >> b; b ...

  6. BZOJ3835[Poi2014]Supercomputer——斜率优化

    题目描述 Byteasar has designed a supercomputer of novel architecture. It may comprise of many (identical ...

  7. BZOJ3585&3339mex——主席树

    题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入 第一行n,m.第二行为n个数.从第三行开始,每行一个询问l,r. 输出 一行一个 ...

  8. Ubuntu 安装 hadoop

    安装完Linux后,我们继续(VMWare 安装 Linux  http://blog.csdn.net/hanjun0612/article/details/55095955) 这里我们开始学习安装 ...

  9. Codeforces Round #416 (Div. 2) B. Vladik and Complicated Book

    B. Vladik and Complicated Book time limit per test 2 seconds memory limit per test 256 megabytes inp ...

  10. day25 面向对象引子

    面向对象编程所谓模子就是 类 抽象的,能知道什么属性,但是不知道属性具体值一切都是对象 有具体值 属性和技能都是根据类 模子来规范 # 人狗大战 # 角色模型 # 人的模型 def Person(na ...