在项目中使用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. Jquery ajax ajaxStart()和ajaxStop()加载前的优雅表现

    Jquery中当一个Ajax请求启动时,并且没有其他未完成的Ajax请求时,将调用ajaxStart()方法.同样,ajaxStop()方法则是在所有Ajax请求都完成时调用.这些方法的参数都是一个函 ...

  2. FEAT: Front-End Auto Testing

    FEAT FEAT: Front-End Auto Testing 前端自动化测试 jest $ yarn add -D jest # OR $ npm i -D jest https://jestj ...

  3. JIRA & GitHub

    JIRA & GitHub https://confluence.atlassian.com/adminjiracloud/connect-jira-cloud-to-github-81418 ...

  4. Java微信二次开发(九)

    多媒体文件上传与下载 第一步:找到包com.wtz.vo,新建类WeixinMedia.java package com.wtz.vo; /** * @author wangtianze QQ:864 ...

  5. linux shell $ 特殊变量

    $0   #Shell本身的文件名 $1-$n   #添加到Shell的各参数值.$1是第1参数.$2是第2参数… $*   #所有参数列表.如"$*"用「"」括起来的情 ...

  6. JUC-Condition线程通信

    1,Codition接口描述了可能会与锁有关联的条件变量.这些变量在用法上与使用Object.wait访问的隐式监视器类似. 但提供了更强大的功能,需要指出的是,单个lock可能与多个conditio ...

  7. BZOJ2212 POI2011Tree Rotations(线段树合并)

    显然子树内的操作不会对子树外产生影响.于是贪心,若交换之后子树内逆序对减少就交换. 这个东西可以用权值线段树计算.操作完毕后需要对两棵权值线段树合并,这个的复杂度是两棵线段树的重复节点个数.那么总复杂 ...

  8. 注册页面手机验证码无跳转接收[html+js+ajax+php]

    [学习笔记] 来源:注册时需要使用短信验证码,但是注册的时候,点击接收验证码时,会产生跳转(尼玛,这不是我想要的啊!o(╥﹏╥)o) 查询资料和看书之后,知道使用js+ajax可以实现,就从网上找了一 ...

  9. Python基础之控制流

    介绍一些Python的基本的东西,你会发现,Python真的很简单.我也尽可能说得简单一些,因为我理解的也很简单. 在到目前为止我们所见到的程序中,总是有一系列的语句,Python忠实地按照它们的顺序 ...

  10. CSS选择器,选择器的优先级

    CSS选择器 CSS基本语法 选择器 + 声明块 选择器 - 通过CSS选择器选中页面中的指定元素,下面会重点写. 声明块 - 选择器后面跟着的是声明块,使用{}括起来,由一个个声明组成,声明由名值对 ...