现在的位置: 首页 > 综合 > 正文

文件上传原理实现

2013年08月05日 ⁄ 综合 ⁄ 共 13748字 ⁄ 字号 评论关闭

文件上传原理实现

客户端浏览器是怎样上传数据的呢?服务器端如何接收上传的文件数据?

级别: 初级

王延成 (王延成), 作者/编者, 

2004 年 9 月 01 日

文章主要描述http表单上传二进制数据流规范的简单实现


(一)关于Form表单上传文件规范

  总结个人在对新技术、新事物的学习和解决问题的过程,深刻体会到多理解掌握技术基础理论知识再加上相应的实践,的确能帮助我们在解决某些问题的时候起到事半功倍的效果。

以前上传文件类似的功能都是采用第三方组件来做的,真的是基于接口编程了。不出问题还好,真要是出现问题解决起来太不舒服了,往往属于那种拆了西墙补东墙的策略。最近,在做文件上传时学习了一些 关于html>form上传数据的格式规范,依据人家定义的规范做了一些简单的工作。。。算是实现了个小轮子吧。


(二)实现

1、规则
1.1 上传数据块的分割规则

基于html form表单上传的数据都是以类似-----------------------------7da3c8e180752{0x130x10}这样的分割符来标记一块数据的起止,可不要忘记后面的两个换行符。关于换行符有三种,如下:

操作系统 换行符描述 原始标记 ascii码 十六进制
Window Window的换行符是两个 //r//n 1310 0x0d0x0a
Unix Unix的换行符是一个 //n 10 0x0a
Mac OS Mac OS的换行符是一个 //r 13 0x0d
这块没有对Unix、MacOS上做测试,只在Window上测试了换行是两个(0x0d0x0a)
1.2 注意在后台从request中取得分割串少两个--,在看下面的原始数据你会发现流的最后是以--结束的。
1.3 上传的原始数据串,本来中文字符是乱码的。为了清晰一些使用字符集UTF-8转了下码。

 
1.4 小结

基于1.3小节可以非常容易总结归纳出html-->form元素内容。有两个文件类型元素,三个text元素(其中一个元素是textarea)

2、操作顺序流程描述




回页首

3、实现代码

需要明确注意的一个问题是关于request.getInputStream();获取请求体数据流不可用的问题,见示例代码: 

3.1、类图

3.2、代码内容

入口Servlet
  
工具类


回页首
  
基础实现
  



回页首

 


(三)资源

示例代码下载
下载示例代码
资料
搜集文件上传原理
表单规范
1、http://www.ietf.org:80/rfc/rfc1867.txt
2、http://www.ietf.org:80/rfc/rfc2045.txt
3、http://www.iana.org:80/assignments/character-sets
4、http://www.htmlhelp.com/reference/html40/forms/form.html


回页首

抱歉!评论已关闭.