问题
java后台接收一张jpg格式图片,发现其在windows下可以正常打开并显示图片内容,但在Ubuntu下打开却提示Error interpreting JPEG image file (Not a JPEG file: starts with 0x89 0x50)。如下图所示:

提示该文件不是JPEG图像文件,文件开头两个字节分别是0x89、0x50。
解决办法
通过维基百科List_of_file_signatures了解到,这两个字节开头的文件签名应该是png文件格式,将文件后缀名修改为png,再打开文件就可以正常显示。

为此在后台接口增加判断文件签名的逻辑,防止前端提交的后缀名并不是文件的真正格式(不仅限于图片)。
对于特意伪造文件头信息的恶意文件,下列逻辑无法起到甄别作用。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class filetools
{
public final static Map<String, String> FILE_TYPE_MAP = new HashMap<

本文探讨了Java后台如何处理在Windows上正常显示而在Ubuntu下报错的JPEG图片问题,通过检查文件签名解决,并提及如何增强文件类型验证以防止恶意文件欺骗。实现代码展示了如何通过解析文件头判断文件类型。
最低0.47元/天 解锁文章
515

被折叠的 条评论
为什么被折叠?



