为什么80%的码农都做不了架构师?>>>   

本文实例讲述了java使用smartupload组件实现文件上传的方法。分享给大家供大家参考。具体分析如下:文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,这里主要说明smartupload组件上传。

废话不多说直接上代码:

import java.io.*;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadTools {private HttpServletRequest request = null; // 取得HttpServletRequest对象private List<FileItem> items = null; // 保存全部的上传内容private Map<String, List<String>> params = new HashMap<String, List<String>>();    // 保存所有的参数private Map<String, FileItem> files = new HashMap<String, FileItem>();private int maxSize = 3145728;                 // 默认的上传文件大小为3MB,3 * 1024 * 1024public FileUploadTools(HttpServletRequest request, int maxSize,String tempDir) throws Exception {    // 传递request对象、最大上传限制、临时保存目录this.request = request;                 // 接收request对象DiskFileItemFactory factory = new DiskFileItemFactory(); // 创建磁盘工厂if (tempDir != null) {                     // 判断是否需要进行临时上传目录factory.setRepository(new File(tempDir)); // 设置临时文件保存目录}ServletFileUpload upload = new ServletFileUpload(factory); // 创建处理工具if (maxSize > 0) {                        // 如果给的上传大小限制大于0,则使用新的设置this.maxSize = maxSize;}upload.setFileSizeMax(this.maxSize);     // 设置最大上传大小为3MB,3 * 1024 * 1024try {this.items = upload.parseRequest(request);// 接收全部内容} catch (FileUploadException e) {throw e;                             // 向上抛出异常}this.init();                             // 进行初始化操作}private void init() {                        // 初始化参数,区分普通参数或上传文件Iterator<FileItem> iter = this.items.iterator();IPTimeStamp its = new IPTimeStamp(this.request.getRemoteAddr()) ;while (iter.hasNext()) {                // 依次取出每一个上传项FileItem item = iter.next();         // 取出每一个上传的文件if (item.isFormField()) {             // 判断是否是普通的文本参数String name = item.getFieldName(); // 取得表单的名字String value = item.getString(); // 取得表单的内容List<String> temp = null;         // 保存内容if (this.params.containsKey(name)) { // 判断内容是否已经存放temp = this.params.get(name); // 如果存在则取出} else {                        // 不存在temp = new ArrayList<String>(); // 重新开辟List数组}temp.add(value);                 // 向List数组中设置内容this.params.put(name, temp);     // 向Map中增加内容} else {                             // 判断是否是file组件String fileName = its.getIPTimeRand()+ "." + item.getName().split("\\.")[1];this.files.put(fileName, item); // 保存全部的上传文件}}}public String getParameter(String name) {     // 取得一个参数String ret = null;                         // 保存返回内容List<String> temp = this.params.get(name); // 从集合中取出内容if (temp != null) {                        // 判断是否可以根据key取出内容ret = temp.get(0);                     // 取出里面的内容}return ret;}public String[] getParameterValues(String name) { // 取得一组上传内容String ret[] = null;                     // 保存返回内容List<String> temp = this.params.get(name); // 根据key取出内容if (temp != null) {                        // 避免NullPointerExceptionret = temp.toArray(new String[] {});// 将内容变为字符串数组}return ret;                             // 变为字符串数组}public Map<String, FileItem> getUploadFiles() {// 取得全部的上传文件return this.files;                         // 得到全部的上传文件}public List<String> saveAll(String saveDir) throws IOException { // 保存全部文件,并返回文件名称,所有异常抛出List<String> names = new ArrayList<String>();if (this.files.size() > 0) {Set<String> keys = this.files.keySet(); // 取得全部的keyIterator<String> iter = keys.iterator(); // 实例化Iterator对象File saveFile = null;                 // 定义保存的文件InputStream input = null;             // 定义文件的输入流,用于读取源文件OutputStream out = null;             // 定义文件的输出流,用于保存文件while (iter.hasNext()) {            // 循环取出每一个上传文件FileItem item = this.files.get(iter.next()); // 依次取出每一个文件String fileName = new IPTimeStamp(this.request.getRemoteAddr()).getIPTimeRand()+ "." + item.getName().split("\\.")[1];saveFile = new File(saveDir + fileName);     // 重新拼凑出新的路径names.add(fileName);            // 保存生成后的文件名称try {input = item.getInputStream();             // 取得InputStreamout = new FileOutputStream(saveFile);     // 定义输出流保存文件int temp = 0;                            // 接收每一个字节while ((temp = input.read()) != -1) {     // 依次读取内容out.write(temp);         // 保存内容}} catch (IOException e) {         // 捕获异常throw e;                    // 异常向上抛出} finally {                     // 进行最终的关闭操作try {input.close();            // 关闭输入流out.close();            // 关闭输出流} catch (IOException e1) {throw e1;}}}}return names;                            // 返回生成后的文件名称}
}

下面开始讲解smartupload

smartupload是由www.jspsmart.com网站开发的一套上传组件包,可以轻松的实现文件的上传及下载功能。smartupload组件使用简单、可以轻松的实现上传文件类型的限制、也可以轻易的取得上传文件的名称、后缀、大小等。smartupload本身是一个系统提供的jar包(smartupload.jar),用户直接将此包放到classpath下即可,也可以直接将此包拷贝到TOMCAT_HOME\lib目录之中。

下面使用组件完成上传:

单一文件上传:

<html>
<head><title>smartupload组件上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
<form action="smartupload_demo01.jsp" method="post" enctype="multipart/form-data">图片<input type="file" name="pic"><input type="submit" value="上传">
</form>
</body>
</html>

jsp代码:

smartupload_demo01.jsp

<%@ page contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="com.jspsmart.upload.*" %>
<html>
<head><title>smartupload组件上传01</title></head><body><%SmartUpload smart = new SmartUpload() ;smart.initialize(pageContext) ;    // 初始化上传操作smart.upload();        // 上传准备smart.save("upload") ;    // 文件保存out.print("上传成功");
%>
</body>
</html>

批量上传:

html文件:

<html>
<head><title>smartupload组件上传02</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
<form action="smartupload_demo02.jsp" method="post" enctype="multipart/form-data">图片<input type="file" name="pic1"><br>图片<input type="file" name="pic2"><br>图片<input type="file" name="pic3"><br><input type="submit" value="上传"><input type="reset" value="重置">
</form>
</body>
</html>

jsp代码

smartupload_demo02.jsp:

<%@ page contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="com.jspsmart.upload.*"%>
<%@ page import="com.zhou.study.*"%>
<html>
<head><title>smartupload组件上传02</title></head>
<body>
<%SmartUpload smart = new SmartUpload() ;smart.initialize(pageContext) ;    // 初始化上传操作smart.upload() ;            // 上传准备String name = smart.getRequest().getParameter("uname") ;IPTimeStamp its = new IPTimeStamp("192.168.1.1") ;    // 取得客户端的IP地址for(int x=0;x<smart.getFiles().getCount();x++){String ext = smart.getFiles().getFile(x).getFileExt() ;    // 扩展名称String fileName = its.getIPTimeRand() + "." + ext ;smart.getFiles().getFile(x).saveAs(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator + fileName) ;}out.print("上传成功");
%>
</body>
</html>

简单上传操作上传后的文件名称是原本的文件名称。可通过工具类重命名。

另附上重命名工具类:

package com.zhou.study ;
import java.text.SimpleDateFormat ;
import java.util.Date ;
import java.util.Random ;
public class IPTimeStamp {private SimpleDateFormat sdf = null ;private String ip = null ;public IPTimeStamp(){}public IPTimeStamp(String ip){this.ip = ip ;}public String getIPTimeRand(){StringBuffer buf = new StringBuffer() ;if(this.ip != null){String s[] = this.ip.split("\\.") ;for(int i=0;i<s.length;i++){buf.append(this.addZero(s[i],3)) ;}}buf.append(this.getTimeStamp()) ;Random r = new Random() ;for(int i=0;i<3;i++){buf.append(r.nextInt(10)) ;}return buf.toString() ;}public String getDate(){this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ;return this.sdf.format(new Date()) ;}public String getTimeStamp(){this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS") ;return this.sdf.format(new Date()) ;}private String addZero(String str,int len){StringBuffer s = new StringBuffer() ;s.append(str) ;while(s.length() < len){s.insert(0,"0") ;}return s.toString() ;}public static void main(String args[]){System.out.println(new IPTimeStamp().getIPTimeRand()) ;}
}

附上使用方法:

<html>
<head><title>smartupload上传文件重命名</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>
<body>
<form action="smartupload_demo03.jsp" method="post" enctype="multipart/form-data">姓名<input type="text" name="uname"><br>照片<input type="file" name="pic"><br><input type="submit" value="上传"><input type="reset" value="重置">
</form>
</body>
</html>

Jsp代码:

smartupload_demo03.jsp

<%@ page contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="com.jspsmart.upload.*" %>
<%@ page import="com.zhou.study.*"%>
<html>
<head><title>smartupload</title></head>
<body>
<%SmartUpload smart = new SmartUpload() ;smart.initialize(pageContext) ;    //初始化上传操作smart.upload() ;    // 上传准备String name = smart.getRequest().getParameter("uname") ;String str = new String(name.getBytes("gbk"), "utf-8");    //传值过程中出现乱码,在此转码IPTimeStamp its = new IPTimeStamp("192.168.1.1") ;    // 取得客户端的IP地址String ext = smart.getFiles().getFile(0).getFileExt() ;    // 扩展名称String fileName = its.getIPTimeRand() + "." + ext ;smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator + fileName) ;  out.print("上传成功");
%><h2>姓名:<%=str%></h2>
<img src="upload/<%=fileName%>">
</body>
</html>

转载于:https://my.oschina.net/guanhe/blog/613723

java使用smartupload组件实现文件上传的方法相关推荐

  1. java上传文件到Oracle_用java实现ORACLE数据库的文件上传、下载

    文件上传使用: 的 UploadBean JAVA包,他的文件上传做的还不错,可进行目录或数据库的文件上传,默认使用的是ORACLE 的LONGRAW子段类型,可使用BLOB类型,但需要使用扩展JAV ...

  2. 使用commons-fileupload-1.2.1.jar等组件实现文件上传

    使用的主要jar包:commons-io-1.3.2.jar包;commons-fileupload-1.2.1.jar包:commons-lang-2.3.jar,在使用组件实现文件上传时候要注意前 ...

  3. Java实现FTP批量大文件上传下载

    用Java实现FTP批量大文件上传下载 <iframe id="I0_1416224567509" style="margin: 0px; padding: 0px ...

  4. java语言 文件上传,java中实现文件上传的方法

    java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...

  5. jsp文件通常用common_29.jsp-动态生活之用Commons-FileUpload组件控制文件上传

    sizeMax):设置请求信息实体内容的最大允许的字节数 ★ public List parseRequest(HttpServletRequest req): 解析form表单中的每个字符的数据,返 ...

  6. java 中 FtpClient 实现 FTP 文件上传、下载

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 源代码大部分是网上找的,查来查去,找到几个可以用的例子,改来改去,揉合成现在这个样子. 一. jar ...

  7. jquery组件WebUploader文件上传用法详解

    这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  8. 微信小程序之使用vant-3组件Uploader文件上传

    效果图: 微信小程序之使用vant-3组件Uploader文件上传 1.把vant的weapp包加进来 2.在app.json文件里面"usingComponents"加载进来才能 ...

  9. fileinput 时间_Bootstrap的fileinput插件实现多文件上传的方法

    *1.bootstrap-fileinput 插件git下载地址 2.解决使用bootstrap-fileinput得到返回值 上传图片 $("#file-0a").fileinp ...

最新文章

  1. C#事件(event)解析
  2. openresty url重写
  3. 实现Runnable接口的形式创建线程
  4. 使用 AppleScript 在 Chrome 中查看当前 Safari 打开的网页
  5. 二级c语言上机题库及解析,2013年计算机二级C语言上机题库及答案解析(3)
  6. python编辑器_推荐一款Python编辑器,集Pycharm和Sublime优点于一身的王者
  7. js生日计算年龄_你知道用EXCEL可以从身份证中提取生日、性别、年龄、生肖吗?...
  8. C语言各类位操作用法
  9. 【一天一个C++小知识】009.C++面向对象
  10. [转载]stl之string类用法详细总结
  11. python 加速方法_加速Python的几种方法
  12. 怎么关闭计算机右侧的硬盘预览,选择性关闭视频文件预览 给Win7硬盘CPU减压
  13. Numpy学习笔记(七)数学函数
  14. 哔哩哔哩2020校园招聘 - K个一组翻转链表 一年中的第几天
  15. 【算法学习笔记】74. 枚举 状态压缩 填充方案 SJTU OJ 1391 畅畅的牙签袋(改)...
  16. 虚拟磁盘格式转换:vdi - raw - qcow2
  17. swap()函数实现变量值的交换
  18. word2003文档转pdf预览加盖水印与套红
  19. python计算召回率_分词结果准确率、召回率计算-python
  20. 高防CDN如何防御网络攻击

热门文章

  1. iOS xcode4 编译环境
  2. silverlight体验之三:简单控件堆成个Login
  3. ORB_SLAM2中的疑难杂症
  4. c java 语法_java程序员要学的c语法
  5. linux less 阻塞输出,linux – `less`命令显示输出所用的时间
  6. android 数组排重方法,js数组去重方法集合 - osc_779ncf3o的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. typescript的基本结构_上帝视角看 TypeScript
  8. 修改java的jre_applet访问本地资源,需要修改jre的java.policy
  9. 解决OpenCV4出现“/usr/bin/ld:cannot find -lcudart_static.../usr/bin/ld: cannot find -lx86_64-linux-gnu“问题
  10. java的constructor怎么用,constructor函数 Java中的构造函数Constructor怎么用