用Servlet进行文件上传的原理和实现Servlet是用Java编写的、协议和平台都独立的服务器端组件,使用请求/响应的模式,提供了一个基于Java的服务器解决方案
使用Servlet可以方便地处理在HTML页面表单中提交的数据,但Servlet的API没有提供对以mutilpart/form-data形式编码的表单进行解码的支持,因而对日常应用中经常涉及到到文件上传等事务无能为力
如何用Servlet进行文件的上传,必须编程实现
一、基本原理通过HTML上载文件的基本流程如下图所示
浏览器端提供了供用户选择提交内容的界面(通常是一个表单),在用户提交请求后,将文件数据和其他表单信息编码并上传至服务器端,服务器端(通常是一个cgi程序)将上传的内容进行解码了,提取出HTML表单中的信息,将文件数据存入磁盘或数据库
二、各过程详解A)填写表单并提交通过表单提交数据的方法有两种,一种是GET方法,另一种是POST方法,前者通常用于提交少量的数据,而在上传文件或大量数据时,应该选用POST方法
在HTML代码中,在标签中添加以下代码可以页面上显示一个选择文件的控件
在页面中显示如下(可能随浏览器不同而不同)可以直接在文本框中输入文件名,也可以点击按钮后弹出供用户选择文件的对话框
B)浏览器编码在向服务器端提交请求时,浏览器需要将大量的数据一同提交给Server端,而提交前,浏览器需要按照Server端可以识别的方式进行编码,对于普通的表单数据,这种编码方式很简单,编码后的结果通常是field1=value2&field2=value2&⋯的形式,如name=aaaa&Submit=Submit
这种编码的具体规则可以在rfc2231里查到,通常使用的表单也是采用这种方式编码的,Servlet的API提供了对这种编码方式解码的支持,只需要调用ServletRequest类中的方法