java 转发上传文件_转发:同事写的HTTP上传文件

本文围绕Java中HTTP文件上传展开,先介绍需了解上传文件的HTTP请求,通过简单程序示范将HTTP请求原始数据写入文件及上传文件。还讲解了up.jsp页面表单提交文件,以及解析MULTIPART/FORM - DATA型数据的要点,最后说明解析请求流数据实现文件上传的原理。

有关Java中使用FTP上传文件,之前我有发过邮件

现在说一下“HTTP文件上传”,也就是在网页中向WWW服务器上传文件

要实现HTTP文件上传,我们必须先了解上传文件的HTTP请求。

我做了个简单的程序示范了把HTTP请求的原始数据写入文件以及如何上传文件。

用文本编辑器查看该文件即可了解请求的格式

在此基础上我们就可以提取出上传文件的名字、文件内容以及原本混合在一起的其他信息。

up.jsp页面提供一个表单,可以从这里输入一般数据和选择文件并把文件上传到服务器。

up.jsp程序可以放在OC4J下的任意项目下运行

注意,

标记有一个enctype属性,属性值是"MULTIPART/FORM-DATA"。

"MULTIPART/FORM-DATA"是多段数据提交格式,就是说提交的数据不单是字符文本数据

还包括其他比如文件的数据,当提交文件数据时必须要指定这个属性

但用了这个属性之后我们将不能用普通的request.getParameter()来取表单数据

必须要用另外的方式来解析"MULTIPART/FORM-DATA"型的数据

页面还有个type为file的Input是用来选择上传文件的。

up.jsp中的doUpload()方法把request对象的表单原始数据写入D:\test.txt文件.

doUpload()方法如下

public void doUpload(HttpServletRequest request) throws IOException

{

PrintWriter pw = new PrintWriter( new BufferedWriter(new FileWriter("D:\\test.txt")));

ServletInputStream in = request.getInputStream();

int i = in.read();

while (i != -1)

{

pw.print((char) i);

i = in.read();

}

pw.close();

}

%>选择上传一个文本或者其他文件。点击“提交”按钮之后,表单就提交了,一起提交的还有上传的文件。

提交之后会生成一个D:\test.txt文件。

打开test.txt文件,我们可以看到上传文件的内容和一些上传的信息了。

test.txt文件示例:

-----------------------------7d63e71a403a6

Content-Disposition: form-data; name="company"

XX

-----------------------------7d63e71a403a6

Content-Disposition: form-data; name="filename"; filename="D:\Temp\TestFile.txt"

Content-Type: text/plain

test.txt文件中出现乱码是没有处理中文的缘故

从test.txt文件中我们可以看出

提交的数据以“-----------------------------7d63e71a403a6”形式来分隔

下面列出关于数据的格式和name,等等的一些属性

数据的Content-Type属性没有的话表示普通的字符串数据,如"company"=XX

数据的Content-Type属性为text/plain则表示格式为文本文件格式,其filename属性是文件的文件名

当然如果上传的是图片的话,Content-Type属性就是image/gif或者image/jpg

从以上我们可以看出,通过解析test.txt(也就是request流数据)中的数据,就可以提取出我们所需要的数据

把提取出来的数据保存到相应文件,我们就可以实现HTTP的文件上传

事实上现在有很多第三方的uploadfile组件,都是利用这个原理来实现HTTP文件上传

相信了解了HTTP文件上传的原理,大家会在理解文件上传方面有一定的帮助

在以后要用到HTTP文件上传功能的地方,就算用的是第三方的类库

也能够做到知其然,知其所以然``

PS:请将form的METHOD改用post传送,用request如果文件太大,会丢失内容.

posted on 2006-03-14 09:29 淡泊明志,宁静致远 阅读(6095) 评论(4)  编辑  收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值