首页 > 代码库 > 【Java技术点滴】——精简实现图片处理

【Java技术点滴】——精简实现图片处理



引言:

对于图片的处理是很多项目中都会用到的,如一般的人事管理系统等,处理方式主要分为两大类:

1.图片文件存储与磁盘中,数据库中只保存相对应的文件名;

2.文件采用二进制的形式保存于数据库中。

第二种方案占用空间大,并且对二进制流的操作也较为占用资源,因此采用第一种方案进行处理的情况较为常见,常用于一般的系统应用中,正在进行中的drp项目中用到了图片上传、显示的功能处理,采用commons-fileupload1.1.1版本,可以实现多文件的上传功能。

实现:

引入相关jar包后,对方法进行了精简,简单实现文件上传的功能:

public class FileUploadServlet {

    private File uploadPath;
    private File tempPath;

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException{
		DiskFileItemFactory factory = new DiskFileItemFactory();

		factory.setSizeThreshold(4096);
		factory.setRepository(tempPath);

		String itemNo = "";
		ServletFileUpload upload = new ServletFileUpload(factory);

		//设置上传文件最大值
		upload.setSizeMax(1000000 * 20);

		try{
			//获取提交表单内的集合信息
			List fileItems = upload.parseRequest(request);

			//遍历集合内元素
			for (Iterator iter = fileItems.iterator(); iter.hasNext();){

				FileItem item = (FileItem)iter.next();

				//是普通的表单输入域
				if(item.isFormField()){
					//非提交文件数据的处理                        
				}

				//忽略其他不是文件域的所有表单信息
				if (!item.isFormField()) {
					String fileName = item.getName();
					long size = item.getSize();
					if((fileName==null||fileName.equals("")) && size==0)
						continue;
						item.write(new File(uploadPath, fileName));
				}
			}
		}
		catch (Exception e){
			e.printStackTrace();
		}
	}

	//初始化路径信息:存储路径、临时存放路径
	public void init() throws ServletException {
		uploadPath = new File(getServletContext().getRealPath("upload"));
		if(!uploadPath.exists()){
			uploadPath.mkdir();    //建立相对应的上传文件夹
		}
		tempPath = new File(getServletContext().getRealPath("tmp"));
		if(!tempPath.exists()){
			tempPath.mkdir();
		}
	}
}


注意:

1.上传文件所在表单必须采用Post提交

2.上传文件所在表单添加属性ENCTYPE="multipart/form-data"--多段数据提交格式(不仅包含文本格式)

3.使用request.getParameter()获取属性值的方法将失效,需使用该组件内封装的方法进行获取数据。

4.Servlet类实现的文件上传路径目录会在Servlet初始化时确定,因此该路径是动态创建的。

 

小结:

图片处理到服务器后,对于显示图片(或文件),可在对应数据库表中添加字段存储文件名信息,读取图片时获取文件名,拼接路径后即可显示,这就要求在实现上传功能的同时也要实现对数据库记录的更新操作

在对图片的处理功能上,有很多第三方提供的组件,在只是简单应用的前提下进行了了解,对于需要专门的、专业的图片处理的项目中,会有专门的图片服务器来进行使用。

 

参考:

下载

图片存储架构学习:独立的图片服务器,给爱一个独立的空间

【Java技术点滴】——精简实现图片处理