1 /***2 * 上传证明材料3 *@paramfiles4 *@paramrequest5 *@return
6 */
7 @RequestMapping(value = "/bitchUploadFile", method ={RequestMethod.POST, RequestMethod.GET})8 @ResponseBody9 public ResponseResult bitchUploadFile(@RequestParam(value = "files", required = false) MultipartFile[] files, HttpServletRequest request) {10 log.info("进入上传证件方法。。。");11 ResponseResult res = newResponseResult();12 byte[] data = null;13 List urls = new ArrayList<>();14 if (null != files && files.length > 0) {15 for(MultipartFile file : files) {16 try{17 //判断图片大小是否大于1M
18 if (file == null || file.isEmpty() || file.getSize() >UPLOAD_FILE_SIZE) {19 return ResponseResult.FAIL("上传文件为空或者超过规定的大小");20 }21 String[] suffixNamesNotDel = {"jpg", "jpeg", "png", "JPG", "JPEG", "PNG"};22 String[] suffixNames = {".jpg", ".jpeg", ".png", ".JPG", ".JPEG", ".PNG"};23 List suffixNamesNotDelList =Arrays.asList(suffixNamesNotDel);24 List suffixNamesList =Arrays.asList(suffixNames);25 //获取图片的文件名
26 String fileName =file.getOriginalFilename();27 int dotIndex = fileName.lastIndexOf(".");28 if (dotIndex < 0) {29 dotIndex =fileName.length();30 }31 //通过判断后缀判断
32 String suffixName =fileName.substring(dotIndex);33 //根据文件头名判断文件实际类型
34 boolean su =suffixNamesList.contains(suffixName);35 //获取图片的扩展名
36 String extensionName = fileName.substring(fileName.lastIndexOf(".") + 1);37 if(su) {38 String uploadUrl = "";39 //上传文件返回服务器存储路径(公用方法)
40 String db = "demo";41 uploadUrl =saveFile(extensionName, db, file);42 //使用base64编码返回前端
43 InputStream in = newFileInputStream(uploadUrl);44 data = new byte[in.available()];45 in.read(data);46 in.close();47 //对字节数组进行base64编码
48 BASE64Encoder encoder = newBASE64Encoder();49 String strBase64 ="data:image/jpeg;base64,"+encoder.encode(data);50 urls.add(strBase64);51 res =ResponseResult.SUCCESS(urls);52 } else{53 return ResponseResult.FAIL("请上传格式为jpg和png的图片文件");54 }55 } catch(Exception e) {56 log.error("上传图片失败" +e);57 return ResponseResult.FAIL("上传图片失败");58 }59 }60 }61 returnres;62 }63
64
65 /**
66 *@paramextensionName 原文件扩展名67 *@paramdb Business differentiation区分不同业务,避免上传文件名相同68 *@paramfiledata 上传的文件数据69 * @Description 文件上传到配置文件 common.properties中的image.storage.root.path路径上70 */
71 publicString saveFile(String extensionName, String db, MultipartFile filedata) {72 //新的图片文件名 = 获取时间戳+"."图片扩展名
73 String newFileName = db + String.valueOf(System.currentTimeMillis()) + "." +extensionName;74 String saveFilePath = "";75 String preImgUrl = "";76 FileOutputStream out = null;77 try{78 //根据配置文件获取服务器图片存放路径79 //这里封装了读取配置文件的方法 配置文件中有图片的存放地址和获取地址80 //根据配置文件获取图片上传路径
81 saveFilePath = "D:/aWangzhaung/tools";82 preImgUrl = "D:/aWangzhaung/tools";83 /*构建文件目录*/
84 File fileDir = newFile(saveFilePath);85 if (!fileDir.exists()) {86 fileDir.mkdirs();87 }88 out = new FileOutputStream(saveFilePath +File.separator89 +newFileName);90 //写入文件
91 out.write(filedata.getBytes());92 out.flush();93 } catch(Exception e) {94 log.error("上传图片失败" +e);95 return "";96 } finally{97 if (out != null) {98 try{99 out.close();100 } catch(IOException e) {101 e.printStackTrace();102 }103 }104 }105 return preImgUrl + "/" +newFileName;106 }