`
cuteyangqiang
  • 浏览: 27431 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java上传图片格式验证

    博客分类:
  • Java
阅读更多

        搞旺旺Space两个多月了,终于预发布了,如果没问题就等待正式发布了。在这个项目中我负责的是图片的上传,客户端不是我搞的,服务端的代码是我写的,虽然还需要调用图片存储接口来完成图片的存储工作。在搞图片上传最开始的就是图片格式的验证,最开始只是简单的根据后缀名来验证,但发现不安全,又改用文件流来验证,发现性能不好,最后采用的是文件头来验证,虽说没有前两个的问题,但是因为图片格式太多,不能穷举,还是在旺旺客户端牛P张世长的帮助下,完善了一下验证的格式,勉强可以满足90%的图片验证,下面就是验证逻辑:

public static boolean checkImageTypeVailable(File file) {
		if (file == null) {
			return false;
		}
		try {
			byte[] imgContent = FileUtils.readFileToByteArray(file);
			int len = imgContent.length;
			byte n1 = imgContent[len - 2];
			byte n2 = imgContent[len - 1];
			byte b0 = imgContent[0];
			byte b1 = imgContent[1];
			byte b2 = imgContent[2];
			byte b3 = imgContent[3];
			byte b4 = imgContent[4];
			byte b5 = imgContent[5];
			byte b6 = imgContent[6];
			byte b7 = imgContent[7];
			byte b8 = imgContent[8];
			byte b9 = imgContent[9];
			
			//GIF(G I F 8 7 a)
			if (b0 == (byte)'G' && b1 == (byte)'I' && b2 == (byte)'F' && b3 == (byte)'8' && b4 == (byte)'7' && b5 == (byte)'a') {
				return true;
			//GIF(G I F 8 9 a)
			} else if (b0 == (byte)'G' && b1 == (byte)'I' && b2 == (byte)'F' && b3 == (byte)'8' && b4 == (byte)'9' && b5 == (byte)'a') {
				return true;
			//PNG(89 P N G 0D 0A 1A)
			}else if (b0 == -119 && b1 == (byte)'P' && b2 == (byte)'N' && b3 == (byte)'G' && b4 == 13 && b5 == 10 && b6 == 26) {
				return true;
			//JPG JPEG(FF D8 --- FF D9)
			} else if (b0 == -1 && b1 == -40 && n1 == -1 && n2 == -39){
				return true;
			} else if (b6 == (byte)'J' && b7 == (byte)'F' && b8 == (byte)'I' && b9 == (byte)'F'){
				return true;
			} else if (b6 == (byte)'E' && b7 == (byte)'x' && b8 == (byte)'i' && b9 == (byte)'f'){
				return true;
			//BMP(B M)
			} else if (b0 == (byte)'B' && b1 == (byte)'M') {
				return true;
			}else {
				return false;
			}
		} catch (ArrayIndexOutOfBoundsException e) {
			return false;
		} catch (IOException e) {
			return false;
		}
	}

 

分享到:
评论

相关推荐

    Java实现图片上传

    本文将深入探讨如何使用Java来实现图片上传的功能,主要涉及的技术点包括文件处理、HTTP请求、Multipart编码以及服务器端存储策略。 首先,我们需要了解Java中的文件操作。Java提供了一系列的File类API,可以用来...

    java实现批量上传图片

    3. **文件验证**:在接收图片时,需要进行验证,确保上传的文件确实是图片格式,比如JPEG、PNG、GIF等,并且检查文件大小,防止过大文件导致服务器资源耗尽。 4. **进度条显示**:为了提供良好的用户体验,批量上传...

    Java判断上传图片格式的实例代码

    Java判断上传图片格式的实例代码 在本文中,我们将详细介绍Java判断上传图片格式的实例代码,主要讲解了如何使用Java来判断上传的图片格式。我们都知道,客户上传图片时,可能会将png的图片后缀名改为jpg,从而绕过...

    java实现上传网络图片到微信临时素材

    微信临时素材是指微信服务器上的一种临时存储形式,通过上传图片到微信临时素材,我们可以在微信平台上使用这些图片。 知识点 1:微信临时素材 微信临时素材是指微信服务器上的一种临时存储形式,用户可以上传图片...

    java上传图片完整deom

    这个"java上传图片完整deom"示例提供了一个简单的解决方案,它包含了一整套用于实现图片上传功能的代码。下面,我们将深入探讨这个示例中涉及的关键知识点。 1. **文件I/O操作**:在Java中,上传图片首先需要读取...

    java 上传图片配置

    以上就是关于"java上传图片配置"的主要知识点,涵盖了从后端接收图片、处理图片到存储图片的全过程,以及涉及到的JavaMagick和ImageMagick工具的使用。在实际开发中,根据项目需求和团队技术栈,可以选择不同的实现...

    java 批量上传图片

    - 图片格式验证:防止恶意用户上传非图片文件。 - 文件大小限制:设定上传文件的最大大小,避免服务器资源被耗尽。 - 权限控制:确保只有授权用户才能进行图片上传。 9. **性能优化**: - 使用流式传输:避免一...

    java上传图片到七牛云

    以上就是关于“Java上传图片到七牛云”的详细步骤和知识点。通过这段代码示例,你可以了解如何在Java环境中实现与七牛云的交互,完成图片的上传操作。如果需要自定义文件名,只需修改`key`变量即可。在实际项目中,...

    java多图片上传、删除、预览,post提交

    在Java开发中,图片上传、删除和预览是常见的功能需求,尤其是在Web应用中。这里我们探讨的是如何利用Java和layui插件实现这些功能,并通过POST方法将数据提交到服务端。layui是一款流行的前端UI框架,它提供了丰富...

    java图片上传.zip

    设计一个清晰的RESTful API来处理图片上传请求,包括POST请求用于上传图片,GET请求用于获取已上传图片的URL。 10. **文件持久化**: 除了直接存储在文件系统,还可以使用数据库如MySQL或NoSQL(如MongoDB)来...

    java图片上传方式

    本文将深入探讨如何在Java环境中实现这一功能,结合JavaScript(JS)进行前端交互,以达到高效且用户友好的图片上传解决方案。 一、Java图片上传基础 1. **Servlet**:在Java Web应用中,Servlet扮演着接收HTTP...

    java上传图片并显示

    总的来说,“java上传图片并显示”这一功能涵盖了前端交互、后端处理、数据库操作以及安全性和性能优化等多个方面。在开发过程中,需要熟练掌握Java IO、图像处理、数据库操作、网络安全等相关知识,并且对整个Web...

    java图片上传源代码

    在Java Web开发中,图片上传是一项常见的功能,用于允许用户上传他们的图片到服务器。这个案例主要涉及Struts2框架,一个流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。Struts2提供了...

    java开发的图片上传工具

    在正式存储图片前,应进行必要的验证,包括文件类型(如只允许上传JPEG、PNG等格式)、文件大小限制(防止DoS攻击)等。这通常通过MIME类型检查和文件大小比较完成。 5. **文件存储**: 图片最终会存储在服务器的...

    图片上传下载Java

    4. **文件格式检查**: 在保存之前,要验证文件是否为图片格式,如JPEG、PNG、GIF等,可以通过文件的MIME类型或文件头信息判断。 5. **文件大小限制**: 限制上传文件大小以防止DoS攻击和资源耗尽,可以通过配置...

    java上传接口案例

    在这个“java上传接口案例”中,我们主要关注的是如何利用Java技术实现一个上传接口,以及可能涉及的相关技术和最佳实践。在这个示例中,使用了Axis2框架来构建服务端接口。 首先,让我们了解一下什么是Axis2。Axis...

    java 图片异步上传

    在Java开发中,图片异步上传是一项常见的需求,特别是在构建Web应用时,用户可能需要上传个人头像、商品图片或文章配图等。这个过程通常涉及到前端与后端的交互,以及多线程处理,以确保用户体验的流畅性。下面我们...

    java上传图片

    在Java编程语言中,上传...综上所述,Java上传图片涉及的技术点包括文件上传API的使用、文件存储策略、前端交互、安全控制以及性能优化等多个方面。理解并掌握这些知识点对于开发高效、安全的文件上传功能至关重要。

    java批量图片上传

    - **文件验证**:对上传的图片进行大小、格式等验证,防止恶意文件上传。 - **返回响应**:向前端发送反馈信息,告知上传状态,如成功、失败、错误信息等。 3. **安全性**: - **防止CSRF攻击**:添加CSRF token...

    java上传图片到服务器源码下载

    在Java编程领域,上传图片到服务器是一项常见的任务,涉及到网络通信、文件处理和服务器端的数据存储。本资源提供了两个开源库的源码:`commons-io`和`commons-fileupload`,它们是Java进行文件上传操作的重要工具。...

Global site tag (gtag.js) - Google Analytics