java判断是否上传的文件修改后缀

java判断是否上传的文件修改后缀

调用:

    @ApiOperation("图片文件上传")public Result uploadPic(@RequestParam("file")MultipartFile file ){//判断文件后缀名是否被修改Result originalFile = GetFileTypeUtil.getOriginalFile(file);if(!originalFile.isSuccess()){return  originalFile;}.......}

代码:


import com.hronline.commons.tools.utils.Result;
import com.hronline.sys.enums.FileType;
import org.springframework.web.multipart.MultipartFile;import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;public class GetFileTypeUtil {public static Result getOriginalFile(MultipartFile file){try {String suf = "";//首先判断是不是空的文件if (!file.isEmpty()) {//对文文件的全名进行截取然后在后缀名进行删选。int begin = file.getOriginalFilename().indexOf(".");int last = file.getOriginalFilename().length();//获得文件后缀名suf = file.getOriginalFilename().substring(begin + 1, last);}else {return new Result().error("上传文件失败");}InputStream inputStream = new ByteArrayInputStream(file.getBytes());FileType typeByStream = getTypeByStream(inputStream);if(typeByStream == null){return new Result().ok("非常用文件");}String trueSuf = typeByStream.toString();boolean contains = trueSuf.toLowerCase().contains(suf.toLowerCase());//docx有点特殊if(!contains && !(suf.equals("docx") && trueSuf.toLowerCase().equals("zip"))){return new Result().error("文件格式已更改");}} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return new Result().ok("文件格式正确");}/*** byte数组转换成16进制字符串** @param src* @return*/private static String bytesToHexString(byte[] src) {StringBuilder stringBuilder = new StringBuilder();if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v);if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString();}/*** 根据文件流读取图片文件真实类型** @param is* @return*/private static FileType getTypeByStream(InputStream is) {byte[] b = new byte[4];try {is.read(b, 0, b.length);} catch (IOException e) {e.printStackTrace();}String type = bytesToHexString(b).toUpperCase();FileType[] fileTypes = FileType.values();for (FileType types : fileTypes) {//startsWith() 方法用于检测字符串是否以指定的前缀开始if (type.startsWith(types.getValue())) {return types;}}return null;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部