Skip to content

Latest commit

 

History

History
42 lines (29 loc) · 1.3 KB

32.文件上传类型判断.md

File metadata and controls

42 lines (29 loc) · 1.3 KB

#32 文件上传类型判断

接触过很多系统,发现很多小伙伴在处理文件上传时,总是犯这样或那样的错误。其中一个就是对文件类型的判断。

很多小伙伴都仅仅判断文件名后缀来区别文件类型,特别是在Linux系统上,文件的执行并不依赖于文件的后缀,嗯,这很危险。

同样地,而如果仅仅判断content-type,对一些脚本的过滤也是不可取的。例如jsp/php/py的文件类型都是text。

正确的姿势应该判断content-type和文件名后缀,并把文件保存到没有执行权限的文件系统目录中。

下面是一段处理图片格式上传的代码:

@Controller
public class FileUploadController {

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody boolean upload(MultipartFile file) {
	if (file != null) {
		return isImage(file);
	}

	return false;
}

private static boolean isImage(MultipartFile file) {
	String contentType = file.getContentType();

	if (contentType.toLowerCase().matches("image/(jpg|png|gif|bmp)")) {
		String filename = file.getOriginalFilename();

		if (filename.indexOf(".") > -1) {
			String suffix = filename.substring(filename.lastIndexOf("."));

			return suffix.toLowerCase().matches("\\.(jpg|png|gif|bmp)");
		}
	}

	return false;
}
}