1.页面端
<form action="mem/upload" method="post" enctype="multipart/form-data" onsubmit="return checkForm(this);">
<input type="hidden" name="flag" value="3"/>
<input type="hidden" name="memNo" value="${mem.memNo}"/>
<input type="hidden" name="authSt" value="${mem.idCardAuth}"/>
<c:if test="${mem.idCardAuth==0}">
<input type="file" name="authFile"/>
<input type="submit" value="上传"/>
</c:if>
<c:if test="${mem.idCardAuth!=0}">
<input type="file" name="authFile"/>
<input type="submit" value="重新上传"/>
</c:if>
</form>
2.控制器
@RequestMapping(value="upload",method=RequestMethod.POST)
public String upload(DefaultMultipartHttpServletRequest multipartRequest,
@RequestParam int memNo, @RequestParam int flag,@RequestParam int authSt, HttpServletResponse response){
if (multipartRequest != null){
memberService.uploadMemPic(multipartRequest,memNo, flag,authSt);
}
//uploadService.json_encode(response, list);
//return "redirect:/pic/upload/"+carNo; return "redirect:/mem/detail/"+memNo;
}
3.Service层方法
/**
*
* @param multipartRequest
* @param memNo
* @param picKey
* @param flag 1::本人照片,3:身份证正面照,4:身份证背面,5:驾照照片
* @param authSt 0:未上传
*/
public void uploadMemPic(DefaultMultipartHttpServletRequest multipartRequest, int memNo, int flag, int authSt) {
Map<String,Object> map = new HashMap<String,Object>();
map.put("memNo", memNo);
map.put("flag", flag);
Map<String,Object> memPath = memberMapper.getMemBasePath(map);
String basePath = (String)memPath.get("basePath");
String oldPicKey = (String)memPath.get("picKey");
if(authSt != 0 && StringUtils.hasText(oldPicKey)){
OSSUtils.deleteOSSObjectAuth(oldPicKey);//删除之前的图片
}
MultipartFile multifile = multipartRequest.getFile("authFile");
String picName = multifile.getOriginalFilename();
String extName = picName.substring(picName.lastIndexOf("."));
String newPicName = FILE_NAME_MAPING.get(flag) + extName;
String picKey = "mem/" + basePath + newPicName;
map.put("picKey", picKey);
memberMapper.updateAuth(map);//更新数据库表
try {
// OSSUtils.uploadInputStreamAuth(picKey, multifile); //压缩身份证和驾照图片, 140918
InputStream input = null;
input = multifile.getInputStream(); //Image image = ImageIO.read(input);
BufferedImage bufImg = ImageIO.read(input);//把图片读入到内存中
//压缩代码
bufImg = Thumbnails.of(bufImg).size(bufImg.getWidth(), bufImg.getHeight()).outputQuality(0.9).asBufferedImage();
OSSUtils.uploadInputStreamAuth(picKey, bufImg);
} catch (Exception e) {
logger.error("",e);
}
}
4.OSSUtils工具类
public static boolean uploadInputStreamAuth(String key, BufferedImage image) throws Exception{
boolean errorCode = false;
ObjectMetadata objectMeta = new ObjectMetadata();
objectMeta.setContentType("image/*");//在metadata中标记文件类型
// InputStream input = multifile.getInputStream();
// InputStream inputTmp = multifile.getInputStream();
//-------------------- //转成inputStream
ByteArrayOutputStream bos = new ByteArrayOutputStream();//存储图片文件byte数组
ImageOutputStream ios = ImageIO.createImageOutputStream(bos);
ImageIO.write(image, "jpg", ios); //图片写入到 ImageOutputStream
InputStream input = new ByteArrayInputStream(bos.toByteArray());
InputStream inputTmp = new ByteArrayInputStream(bos.toByteArray());
try {
objectMeta.setContentLength(input.available()); //校验文件MD5值
PutObjectResult res = client.putObject(BUCKET_AUTH, key, input, objectMeta);
String checkMD5 = res.getETag();
String verifyCode = getFileInputStreamMD5(inputTmp);
if(verifyCode.equalsIgnoreCase(checkMD5) == true){
logger.info("文件上传成功:{}",key);
errorCode = true;
}else{
logger.error("文件上传失败:{}",key);
}
} catch (Exception e) {
logger.error("",e);
}finally{ if(inputTmp != null){
inputTmp.close();
}
} return errorCode;
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15257.html