阿里云图片压缩上传代码详解编程语言

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/15257.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论