这些笔记都是实用的技术细节:
图片处理流程,无外乎几个步骤
1、web上传图片
2、服务端接收图片
3、服务端处理图片
4、保存图片
上传图片:
一句话:设置form的属性enctype为multipart/form-data
在HTML中,使用表单Form主要是用来向服务器提交数据,格式如下:
<FORM ACTION="URL"
METHOD="GET|POST"
ENCTYPE="…" TARGET="...">
. . .
</FORM>
enctype指定了表单提交给服务器时的内容形式(Content-Type),默认值是"application/x-www-form-urlencoded",这时,表单信息一般采用URL编码制。
但是,当向服务器传送图片或文件这样包含非ASCII字符或二进制数的数据时,根据RFC1867规定,就必须使用“multipart/form-data”内容类型。
其实无论是默认表单信息,还是图片文件,这些内容都是装载在HTTP协议的正文内容部分,都可以看成HTTP协议携带的对象,只是两种正文内容形式不一样。前者是String字符串类型,而后者则是一个通用的数据对象类型(Object)。在以后章节中将专门讨论HTTP协议装载数据对象的底层细节。
使用“multipart/form-data”上传文件的格式写法如下:
<FORM ACTION="URL" METHOD="GET|POST" ENCTYPE=" multipart/form-data ">
</FORM>
文件通过HTTP协议传送到服务器端后,需要在服务器端对该文件进行专门的接受。HttpServletRequest没有提供直接获取文件数据的方法,因此需要开发专门的服务器文件处理组件。
目前有两种上传文件处理组件:一种是基于完全JSP结构的,使用JSP来处理上传的文件,以SmartUpload(http://www.jspsmart.com)最常用;还有一种是完全的JavaBeans组件:Cos文件上传组件包(http://www.servlets.com/cos/index.html),Cos可以使用在JSP中,也可以使用在Servlet或Servlet Filter中。
由于在实际应用中,文件上传功能往往和其他正常表单参数一起混合使用,而不是独立使用的。因此,可以设定一个Servlet专门用来处理这类混合表单的请求,在将文件接受处理后,自动导向到处理表单正常参数的JSP/Servlet去处理。
表单调用示例如下:
method="post" enctype="multipart/form-data">
在这个表单中,既有文件提交,也有username这样正常的参数需要提交,提交的Servlet名为multipartformserv。
接收图片:
当然是在servlet处理,这里借助类com.oreilly.servlet.MultipartRequest:
mrequest
Hashtable hashtable=
Enumeration e=
String imgname=(String)e.nextElement();
String imgfile=
hashtable.put(imgname,imgfile);
}
}
}
这样,把图片名称的映射放置于一个hashtable中
new Hashtable();mrequest.getFileNames();while (e.hasMoreElements()) {mrequest.getFilesystemName(imgname);if (imgfile!=null){// System.out.println(imgname+"="+imgfile);return hashtable; = new MultipartRequest(request,uploaddir,size * 1024);
其他继续