java使用smartupload组件实现文件上传的方法

网友投稿 222 2023-08-05


java使用smartupload组件实现文件上传的方法

本文实例讲述了java使用smartupload组件实现文件上传的方法。分享给大家供大家参考。具体分析如下:

文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,这里主要说明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 items = null; // 保存全部的上传内容

    private Map> params = new HashMap>();    // 保存所有的参数

    private Map files = new HashMap();

    private int maxSize = 3145728;                 // 默认的上传文件大小为3MB,3 * 1024 * 1024

    public 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 * 1024

        try {

            this.items = upload.parseRequest(request);// 接收全部内容

        } catch (FileUploadException e) {

            throw e;                             // 向上抛出异常

        }

        this.init();                             // 进行初始化操作

    }

    private void init() {                        // 初始化参数,区分普通参数或上传文件

        Iterator 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 temp = null;         // 保存内容

                if (this.params.containsKey(name)) { // 判断内容是否已经存放

                    temp = this.params.get(name); // 如果存在则取出

                } else {                        // 不存在

                    temp = new ArrayList(); // 重新开辟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 temp = this.params.get(name); // 从集合中取出内容

        if (temp != null) {                        // 判断是否可以根据key取出内容

            ret = temp.get(0);                     // 取出里面的内容

        }

        return ret;

    }

    public String[] getParameterValues(String name) { // 取得一组上传内容

        String ret[] = null;                     // 保存返回内容

        List temp = this.params.get(name); // 根据key取出内容

        if (temp != null) {                        // 避免NullPointerException

            ret = temp.toArray(new String[] {});// 将内容变为字符串数组

        }

        return ret;                             // 变为字符串数组

    }

    public Map getUploadFiles() {// 取得全部的上传文件

        return this.files;                         // 得到全部的上传文件

    }

    public List saveAll(String saveDir) throws IOException { // 保存全部文件,并返回文件名称,所有异常抛出

        List names = new ArrayList();

        if (this.files.size() > 0) {

            Set keys = this.files.keySet(); // 取得全部的key

            Iterator 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();             // 取得InputStream

                    out = 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是由jspsmart.com网站开发的一套上传组件包,可以轻松的实现文件的上传及下载功能,smartupload组件使用简单、可以轻松的实现上传文件类型的限制、也可以轻易的取得上传文件的名称、后缀、大小等。

smartupload本身是一个系统提供的jar包(smartupload.jar),用户直接将此包放到classpath下即可,也可以直接将此包拷贝到TOMCAT_HOME\lib目录之中。

下面使用组件完成上传

单一文件上传:

复制代码 代码如下:

    图片

   

jsp代码:

smartupload_demo01.jsp

复制代码 代码如下:

<%@ page contentType="text/html" pageEncoding="utf-8"%>

<%@ page import="com.jspsmart.upload.*" %>

 <%

    SmartUpload smart = new SmartUpload() ;

    smart.initialize(pageContext) ;    // 初始化上传操作

    smart.upload();        // 上传准备

    smart.save("upload") ;    // 文件保存

    out.print("上传成功");

%>

批量上传:

html文件

复制代码 代码如下:

    图片

    图片

    图片

   

   

jsp代码

smartupload_demo02.jsp

复制代码 代码如下:

<%@ page contentType="text/html" pageEncoding="utf-8"%>

<%@ page import="com.jspsmart.upload.*"%>

<%@ page import="com.zhou.study.*"%>

<%

    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

        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("上传成功");

%>

注意:在TOMCAT_HOME/项目目录下建立upload文件夹才能正常运行!

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

另附上重命名工具类。

复制代码 代码如下:

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

                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()) ;

    }

}

附上使用方法:

复制代码 代码如下:

smartupload上传文件重命名

        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("上传成功");

%>

注意:在TOMCAT_HOME/项目目录下建立upload文件夹才能正常运行!

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

另附上重命名工具类。

复制代码 代码如下:

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

                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()) ;

    }

}

附上使用方法:

复制代码 代码如下:

smartupload上传文件重命名

                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()) ;

    }

}

附上使用方法:

复制代码 代码如下:

    姓名

    照片

   

   

Jsp代码:

smartupload_demo03.jsp

复制代码 代码如下:

<%@ page contentType="text/html" pageEncoding="utf-8"%>

<%@ page import="com.jspsmart.upload.*" %>

<%@ page import="com.zhou.study.*"%>

<%

    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("上传成功");

%>

希望本文所述对大家的jsp程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java调用WebService接口的方法
下一篇:SyntaxHighlighter 3.0.83使用笔记
相关文章

 发表评论

暂时没有评论,来抢沙发吧~