`
pharaohsprince
  • 浏览: 296942 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

使用Fileupload上传组件

阅读更多

使用Fileupload上传组件

   Java 项目中,当需要高性能上传文件时,往往就需要依靠组件,而不是手写的servlet了,一般的选择包括jakarta commons-fileupload以及smartupload,由于后者在上传大文件时往往会出错,另外对中文支持一般,笔者采用了前者。(这一点法老深有体会!)

   笔者写了一个名为Fileupload的类,用来封装上传动作。

   文件选择页面代码:   

<script language="JavaScript" type="text/JavaScript">function check(){ if(document.Form1.checkbox[0].checked == true){ document.Form1.ch1.value = document.Form1.checkbox[0].value; } if(document.Form1.checkbox[1].checked == true){ document.Form1.ch2.value = document.Form1.checkbox[1].value; } var newAction = "11"; newAction = Form1.action + "?ch1=" + document.Form1.ch1.value + "&ch2=" + document.Form1.ch2.value; //更新action,使得后面通过页面url获取参数 Form1.action = newAction;}</script><html><head><title>Excel文件上载</title></head><body bgcolor="#FFFFFF" text="#000000"><p><font size="5"color="#FF0000"><b>Excel文件上载</b></font></p><p>文件上传 目的地选择</p><form name="Form1" onSubmit="return check()" enctype="multipart/form-data" method="post" action="uploadResult.jsp"><input type="checkbox" name="checkbox" value="ch1">公共文件夹<input type="hidden" name="ch1" class="input" id="ch1" size="20"><input type="checkbox" name="checkbox" value="ch2">测试文件夹<input type="hidden" name="ch2" class="input" id="ch2" size="20"><p>选择Excel文件 <input type="file" name="File1" size="20" maxlength="20"> </p><p>注意:请确保选中的为Excel格式文件,Excel文件名不能包含空格,文件重名自动覆盖</p><p> <input type="submit"value="提交"> <input type="reset" value="取消"> </p></form>

 

 处理页面代码:

<% String temp = "C:\\TEMP"; char[] label = new char[2]; String labelString = ""; for(int i = 0; i < label.length; i++){ label[i] = '0'; } String des = request.getRealPath("/FinancialReports/excelFile"); //通过检测checkbox的选择情况,确定文件上传路径 //假设上传路径构成为serverPath + 2位标示符 + 具体文件名
if(request.getParameterValues("ch1") != null){ String[] ch1 = request.getParameterValues("ch1"); if(ch1[0].equals("ch1")){ System.out.println("ch1 checked..."); //添加文件标示 label[0] = '1'; } } if(request.getParameterValues("ch2") != null){ String[] ch2 = request.getParameterValues("ch2"); if(ch2[0].equals("ch2")){ System.out.println("ch2 checked..."); //添加文件标示 label[1] = '1'; } } for(int i = 0; i < label.length; i++){ labelString = labelString + label[i]; } des = des + "\\" + labelString; System.out.println("Hello World: " + des); Fileupload fileUpload = new Fileupload(temp, des, request); boolean uploadResult = fileUpload.Upload(true); %>

 

 

Fileupload封装类:

/* * Author: Huang ye(www.hyweb.net) * 代码开源, 引用请注明出处 * * 2005-11-8 * */package net.hyweb;import java.io.File;import java.util.*;import org.apache.commons.fileupload.*;import javax.servlet.http.HttpServletRequest;/** * @author Huangye * * TODO 要更改此生成的类型注释的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */public class Fileupload { //当上传文件超过限制时设定的临时文件位置 private String tempPath = "C:\\TEMP"; //文件上传目标目录 private String destinationPath; //获取的上传请求 private HttpServletRequest fileuploadRequest = null; //设置最多只允许在内存中存储的数据,单位:字节 private int sizeThreshold = 4096; //设置允许用户上传文件大小,单位:字节 //共10M private long sizeMax = 10485760; public Fileupload(){ } public Fileupload(String tempPath, String destinationPath){ this.tempPath = tempPath; this.destinationPath = destinationPath; } public Fileupload(String tempPath, String destinationPath, HttpServletRequest fileuploadRequest){ this.tempPath = tempPath; this.destinationPath = destinationPath; this.fileuploadRequest = fileuploadRequest; } /** 文件上载 * @return true —— success; false —— fail. */ public boolean Upload(){ //如果没有临时目录,则创建它 if(!(new File(tempPath).isDirectory())){ try{ new File(tempPath).mkdirs(); }catch(SecurityException e){ System.out.println("can not make security direcoty"); } } //如果没有上传目的目录,则创建它 if(!(new File(destinationPath).isDirectory())){ try{ new File(destinationPath).mkdirs(); }catch(SecurityException e){ System.out.println("can not make security direcoty"); } } //上传项目只要足够小,就应该保留在内存里。 //较大的项目应该被写在硬盘的临时文件上。 //非常大的上传请求应该避免。 //限制项目在内存中所占的空间,限制最大的上传请求,并且设定临时文件的位置。 DiskFileUpload fu = new DiskFileUpload(); //设置最多只允许在内存中存储的数据,单位:字节 fu.setSizeThreshold(sizeThreshold); //设置允许用户上传文件大小,单位:字节 //10M fu.setSizeMax(sizeMax); //设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 fu.setRepositoryPath(tempPath); Iterator iter = null; //读取上传信息 try { List fileItems = fu.parseRequest(fileuploadRequest); //处理上传项目 //依次处理每个上传的文件 iter = fileItems.iterator(); } catch (FileUploadException e) { e.printStackTrace(); return false; } while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); //忽略其他不是文件域的所有表单信息 if (!item.isFormField()) { //上传的是文件信息 String fieldName = item.getFieldName(); String name = item.getName(); if((name == null) || name.equals("") && item.getSize() == 0){ continue; } System.out.println("processUploadedFile: " + name + " ; " + fieldName); String value = item.getString(); String contentType = item.getContentType(); boolean isInMemory = item.isInMemory(); long sizeInBytes = item.getSize(); String fileName = this.GetFileName(name); try { item.write(new File(this.destinationPath + fileName)); } catch (Exception e) { e.printStackTrace(); return false; } }else{ //上传的是普通表单字域 String fieldName = item.getFieldName(); String name = item.getName(); if((name == null) || name.equals("") && item.getSize() == 0){ continue; } String value = item.getString(); } } return true; } /**从路径中获取单独文件名 * @author Huangye * * TODO 要更改此生成的类型注释的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */ public String GetFileName(String filepath) { String returnstr = "*.*"; int length = filepath.trim().length(); filepath = filepath.replace('\\', '/'); if(length >0) { int i = filepath.lastIndexOf("/"); if (i >= 0) { filepath = filepath.substring(i + 1); returnstr = filepath; } } return returnstr; } /** * 省略所有的getXXX和setXXX访问器方法 */ }

 



分享到:
评论

相关推荐

    使用fileupload组件实现文件上传功能

    FileUpload组件是Apache提供的一款文件上传组件,能够帮助我们轻松实现文件上传功能。下面我们将详细介绍使用FileUpload组件实现文件上传功能的步骤和要点: 首先,需要引入两个jar包:commons-fileUpload.jar和...

    使用FileUpload组件实现上传功能

    使用FileUpload组件实现上传功能,供大家一起共同分享学习。

    commons-fileupload上传组件

    首先,Commons FileUpload组件的核心功能是解析HTTP请求中的`multipart/form-data`内容,这是HTML表单上传文件时通常使用的编码方式。它能够识别并提取每个部分的数据,包括文件内容和其他非文件数据,如文本字段。 ...

    关于FileUpload上传组件

    关于FileUpload上传组件介绍及使用

    利用commons-fileupload上传组件上传文件(一)

    在本文中,我们将深入探讨如何使用Apache Commons FileUpload组件来实现文件上传功能。Apache Commons FileUpload是一个用于处理HTTP请求中的多部分数据的Java库,它使得在Servlet或JSP应用中处理文件上传变得简单易...

    FileUpload上传组件

    "FileUpload上传组件"是一个专为Java Web开发者设计的强大工具,用于处理用户通过网页上传文件的需求。在JSP(JavaServer Pages)环境中,文件上传功能是常见且重要的,例如用户可能需要上传个人照片、文档或其他...

    common fileupload上传组件包

    "Common Fileupload上传组件包"是一个专用于处理Web应用程序中文件上传功能的工具包。这个包包含两个核心组件:`commons-io-1.4.jar`和`commons-fileupload-1.2.1.jar`。这两个组件在实现文件上传过程中扮演着至关...

    基于apache commons.fileupload的文件上传组件,改进了上传速度

    apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...

    FileUpload_php--上传组件

    "FileUpload_php"是一个专门为PHP开发的上传组件,其设计灵感来源于163编辑器的上传功能,旨在提供简单易用且高效的文件上传解决方案。 "FileUpload_php"组件的核心功能包括: 1. **多文件选择**:允许用户通过...

    fileUpload文件上传组件例子

    本示例中的"fileUpload文件上传组件例子"提供了一个自定义实现的文件上传组件,旨在帮助开发者理解并掌握这一关键功能的实现方式。 首先,我们需要了解文件上传的基本原理。在HTML中,`&lt;input type="file"&gt;`标签...

    commons-fileupload 上传组件

    这个组件是Apache Commons项目的一部分,提供了简单而强大的API,使得开发者能够方便地在Web应用中实现文件上传的功能。以下是对`commons-fileupload`组件的详细解释和相关知识点: ### 1. 文件上传基础 在HTTP...

    FileUpload 文件上传组件的ASP.NET源码.rar

    FileUpload 文件上传组件的ASP.NET实例,基于主副窗口的上传程序,利用线程提升上传速度。本插件可支持多文件上传,为了提升上传体验,这里使用了AjaxControlToolkit.dll、MattBerseth.WebControls.AJAX.dll两个组件...

    FileUpload组件

    在IT行业中,文件上传是许多应用程序的基本功能,无论是网页、移动应用还是桌面软件,都可能涉及到用户上传文件的...通过以上信息,开发者可以轻松集成和使用Apache FileUpload组件,实现高效且可靠的文件上传功能。

    利用Common-fileupload封装的文件上传组件...附上源码.

    首先,我们来看一下标题:“利用Common-fileupload封装的文件上传组件...附上源码”。这表明我们将讨论如何使用这个库来创建一个文件上传系统,并且提供有源码可供参考。通过`Common-fileupload`,我们可以实现用户...

    支持断点续传的上传组件FileUpload

    在本文中,我们将深入探讨支持断点续传的上传组件——FileUpload,以及如何利用它来实现高效、可靠的文件上传。 FileUpload组件是专为.NET平台设计的,它集成了ASP.NET框架,能够提供服务器端的稳定支持。通过这个...

    fileupload上传图片前预览

    在ASP.NET开发中,FileUpload控件是用于处理用户上传文件的核心组件,特别是处理图片上传时,为了提供更好的用户体验,通常需要在用户正式提交前实现图片预览功能。这一功能可以减少用户因错误选择或不符合规格的...

Global site tag (gtag.js) - Google Analytics