【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初始化时确定,因此该路径是动态创建的。

小结:

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

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

参考:

下载

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

时间: 2024-08-10 00:05:37

【Java技术点滴】——精简实现图片处理的相关文章

【Java技术点滴】——代理模式及其对事务封装

背景 项目中我们会遇到这样的情况:在几个方法中加入相同的代码,这些代码是与业务无关的,并且以后有可能由于考虑不周或需求变动再或者是其他原因,我们需要对他们进行逐一进行改动.举个具体的例子,比如程序中的日志控制.事务控制等,这些功能是与业务无关的,但却需要将它们与我们的逻辑混在一起,达到一些特殊的需求. 这样的情况往往代码都是相同的,可以抽离出来,为了复用,我们可以将这些相同的代码单独封装成的方法,以供其他需要的地方调用,这样对于以后的修改就做到了只修改一处的效果,达到了程序的复用,但另外一个问题

【Java技术点滴】——XML解析方式比较

为什么? "它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据.是Internet环境中跨平台的.依赖于内容的技术,也是当今处理分布式结构信息的有效工具."XML被设计用来传输和存储数据: 他的平台无关性.语言无关性.系统无关性,给数据继承与交互带来了极大的方便.也因此使用XML的地方越来越常见. 方式 1.DOM--DocumentObject Model 像操作HTML

【Java技术点滴】——ThreadLocal封装JDBC事务操作

背景 在Java程序实现中,我们往往应用到事务的机制,在业务层进行事务开启,创建数据库连接,调用Dao层方法进行数据库访问,过程中需要将数据库连接Connection作为参数传递给Dao层方法.显而易见,这样的实现不利于Dao层方法的复用,当在不使用事务的情况下,我们是需要在Dao层方法中创建数据库连接的,这样Dao层方法免去Connection参数就可以使得方法更加独立.明确了,怎样解决这样的尴尬?对于此,我们使用了ThreadLocal进行解决. 基本介绍 "本地线程变量",可以理

【Java技术点滴】——Filter基本使用与扩展

背景 在程序实现的过程中我们往往碰到类似于这样的问题:为了防止后台接收数据不能乱码,我们需要在处理的Servlet中设置请求字符集,就会在每一个Servlet中加上这样的代码: request.setCharacterEncoding("GB18030"); 这样的代码就是在程序中写死了的,设置字符集的功能是不利于维护的,如果将来要修改为另外一种字符集类型,需要在每个Servlet中进行修改.如果要进行封装,同样面临每个Servlet都要调用的问题,而往往这种方法调用是与具体业务需求关

【Java技术点滴】——JSTL教程之分层思想

是什么? JSTL(JSP Standard TagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标准标签库,是Sun的一个标准,由apache的jakarta小组来实现.维护的. 为什么? 使用JSTL的最大的目的是帮助简化JSP页面作者(这个职位称为pageauthor)的日常工作.page author是指负责使用JSP实现Web应用程序表示层的人员.许多page author是不擅长使用任何编程语言的. page author面临着使用一种脚本语言(也因此他们被看成

java技术体系平台

Java SE(Java Standard Edition)标准版 支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,此版本以前称为J2SE Java EE(Java Enterprise Edition)企业版 是为开发企业环境下的应用程序提供的一套解决方案.该技术体系中包含的技术如:Servlet .Jsp等,主要针对于Web应用程序开发.版本以前称为J2EE Java ME(Java Micro Edition)小型版 支持Java程序运行在

Java技术杂记

本文是临时记录在本子上Java技术的初步整理, 一来举一反三, 二来练习双拼打字. 发现双拼方案里的自然码挺好用的. 搜狗双拼方案对单韵母的字采用"o+韵母", 比如"安oj", "二or"等. 自然码则是"安an", "二er", 符合传统拼音思维. 但是, 自然码美中不足的是"昂ang"为了兼容双拼2个键出字的规则, 强行将a作声母, 原本是"ang"的"

汇道科技:经历这五个学习阶段 成为Java技术大牛妥妥的!

互联网大数据时代飞速发展,IT行业的薪资待遇水涨船高,不少人都心生羡慕,纷纷选择向IT行业进军,其中特别活得就是JAVA大军,每年都有数以万计的各行各业的人转行学习JAVA,那么,一个零基础的人要怎么学习JAVA蜕变成技术大牛呢?我们看看汇道科技JAVA技术总监怎么说. 学习JAVA要分阶段学习,不同资历的人要根据本身实际情况去学习,主要分为这几个阶段: 第一阶段:基础阶段(Java基础) 你将要在这个阶段学会的技能: 软件行业信息了解. java的魅力和安装. 变量. 常量. 算术. 关系.

Java技术体系大全,准备面试的可以参考一下!

1. JAVA技术体系1.1 Java程序员 ·高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变参数.可变返回类型.增强循环.静态导入 ·核心编程 IO.多线程.实体类.集合类.正则表达式.XML和属性文件 ·图形编程 AWT(Java2D/JavaSound/JMF).Swing.SWT.JFace ·网路编程 Applet.Socket/TCP/UDP.NIO.RMI.CORBA ·Java语法基础 类.抽象类.接口.最终类.静态类.匿名类.内部类.异常类.编码规范 ·Java开发