java无组件上传图片_java使用smartupload组件实现文件上传的方法

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

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

下面使用组件完成上传

单一文件上传:

代码如下:

smartupload组件上传

图片

jsp代码:

smartupload_demo01.jsp

代码如下:

smartupload组件上传01

SmartUpload smart = new SmartUpload() ;

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

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

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

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

%>

批量上传:

html文件

代码如下:

smartupload组件上传02

图片

图片

图片

jsp代码

smartupload_demo02.jsp

代码如下:

smartupload组件上传02

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上传文件重命名

姓名

照片

Jsp代码:

smartupload_demo03.jsp

代码如下:

smartupload

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

%>

姓名:

<%=fileName%>

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

更多信息请查看IT技术专栏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值