Form Enctype=multipart/form-data随想

今天写一个JSP页面表单提交excel.xls文档,同时该页面中还有一些html域变量,发现表单编码设置为enctype="multipart/form-data"

时,通过request.getParameter("?");无法取得页面域的值,后来发现表单中enctype="multipart/form-data"的意思是二进制编码,无法直接通过request取得页面域的值,不过可以通过变通方式取得变量值,内在原理就是通过二进制转换,有一些开源java组件对request进行二次包装,可以取得页面域的值。

 

表单默认编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.
enctype=/"multipart/form-data/"是上传二进制数据; form里面的input的值以2进制的方式传过去。
form里面的input的值以2进制的方式传过去,所以request就得不到值了。

 

目前jsp中上传下载组件:

一. SmartUpload 组件

    SmartUpload是由www.jspsmart.com网站开发的一个可免费使用的全功能的文件上传下载组件,适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点:
1、使用简单。在JSP文件中仅仅书写三五行JAVA代码就可以搞定文件的上传或下载,方便。
2、能全程控制上传。利用jspSmartUpload组件提供的对象及其操作方法,可以获得全部上传文件的信息(包括文件名,大小,类型,扩 展名,文件数据等),方便存取。
3、能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件。
4、下载灵活。仅写两行代码,就能把Web服务器变成文件服务器。不管文件在Web服务器的目录下或在其它任何目录下,都可以利用      SmartUpload进行下载。
5、能将文件上传到数据库中,也能将数据库中的数据下载下来,该功能针对的是MYSQL数据库,不具有通用性。

 

二.commons-fileupload组件

 common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小。
下载后解压zip包,将commons-fileupload-1.1.1.jar,和commons-io-1.2.jar复制到tomcat的webapps/你的webapp/WEB-INF/lib/下,如果目录不存在请自建目录。

 

三.UploadBean 组件

UploadBean 是用于文件上载的组件(JAVA component),你可以将上载的文件保存在服 务器的文件夹下或打包成ZIP文件保存在文件夹下,你还可以将文件保存在数据库中 或内存中。这份文档是面向开发者的,我们假设你已经了解一些组件JavaBeans和JSP 技术并且知道什么是组件作用"范围"(page, session, application)。

首先你需要选择存储模式:[Folder] [ZIP Archive] [Database] [Memory]。 此后你可以通 [setStoreModel] 方法进行切换。其次,你可以增加一些限定条件,比如:[blacklist] , [whitelist], [file size limit], [maximum]上载文件大小。存储上载的文件你需要调用 [MultipartFormDataRequest] 对象的[store]方法。( [overwrite] 选项用于处理重复上载文件)。 最后,如果有必要你可以[reset]存储空间。当文件上载时实现[UploadListener]接口的类 可以接收到文件上载事件。上载文件的信息保存在[history] 中(非二进制文件)。UploadBean 支持两种解析器,你可以通过 [parser] 属性进行设置。

 

UploadBean 可以将文件上载到服务器的任意目录或文件夹下,Servlet引擎 必须有对该文件夹和目录的读写权限。

设置文件夹存储模式:

public void setFolderstore(String serverfolder)
参数:文件夹的完全路径 (e.g. /usr/uploads)。
如果文件夹不存在系统将创建一个空文件夹。


UploadBean 可以将文件保存在ZIP文件中。Servlets引擎必须有对包含该ZIP文件的文件夹 的读写权限。

 

public void setZipfilestore(String file)
参数:ZIP文件的完全路径(e.g. /usr/upload/uploaded.zip).
如果不存在系统将创建一个空ZIP文件。

UploadBean 可以将上载文件保存在任意支持长原始(long RAW)数据(例如: 二进制文件)。你需要一个表(UPLOADS),表中有三个字段:UPLOADID(主键) ,FILENAME(上载文件名),二进制数据(BINARYFILE)。你可以通过UploadBean类 的SQLUPLOAD* 公有静态成员变量更改表以及字段名字。

初始化JDBC连接 :
public void setDatabasestore(String driver, String URL, Properties credentials)
参数:JDBC driver标识,JDBC URL ,其它连接属性(用户名/口令)。
此方法将驱动程序装载到内存里,并建立一个数据库连接。

public void setDatabasestore(Connection jdbcconnection)
参数:数据库连接名,该连接可以来自数据源(DataSource)或连接池。

 

UploadBean 可以将上载的文件存储JVM内存中。已上载的文件将被存在一个"Vector"对象中。 这是一个"UploadFile"类型的Vector。 (更多信息看 API ).
设置内存存储模式:

public void setStoremodel(int storeid)
参数:内存存储标识符(MEMORYSTORE

 

 

切换存储模式。

public void setStoremodel(int storeid)
参数:存储标识符...

 

  • 项目主页:
  • 文档地址: http://www.javazoom.net/jzservlets/uploadbean/documentation_cn/developerguide.html
  • 下载地址: http://www.javazoom.net/jzservlets/uploadbean/uploadbean.html
  •  

     

    四.Download4J 组件

    Download4J是一个Java组件(Servlet的+ JavaBean的),允许下载文件从文件夹作为源,
    一个ZIP存档或数据库(Oracle,DB2中,MySQL的...).要设置Download4J你需要编写或自定义XML配置文件。
    每个源都有一个配置文件:[ 文件夹 ],[ ZIP归档 ]和[ 资料库 ]。 你可以定义全局和特定文件的下载,属性,如柜台,登录/密码,
     最后,你必须声明这个配置文件,下载的URL映射到Download4J部署描述符,
     然后最终用户可以通过下载获得的文件的URL,下载的痕迹 ,如日期和时间,最终用户的IP地址.

     

    Download4J 可以下载目录或文件存储在任何文件夹文件夹和文件必须具有读取权限。
    这里是一个文件样本Download4J配置:

    XML Sample for FOLDER source : folder.xml
    <DOWNLOAD>
      <FOLDER ID="uniqueid" PATH="">
        <PROPERTIES CONTENT-TYPE-FILE="conf/mimes-type.xml"/>
        <FILE NAME="protectedtest.pdf" MAXDOWNLOAD="3" LOGIN="login" PASSWORD="password"/>
        <FILE NAME="ziptest.html" URLMAPPING="ziptest.zip" ZIP="enabled"/>
      </FOLDER>
    </DOWNLOAD>

     

     

     

     

     

     

     

     

     

     文档地址:http://www.javazoom.net/jzservlets/download4j/documentation/configurationguide.html

     

    这几个组件的效率如何,还需进一步研究...............

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值