zoukankan      html  css  js  c++  java
  • 阿里云图片压缩上传代码

    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;
        }
  • 相关阅读:
    Change OL3 drawing cursor (blue circle)
    解决Bootstrap's dropdowns require Popper.js
    bootstrap-table 如何获得服务器返回的json数据中的二级数组
    The database returned no natively generated identity value
    控制台报错:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException之解决方法
    Tomcat起不来解决方法(the selection cannot be run any server & unable to start within 45 seconds)
    mysql语句优化
    mysql_知识点整理
    web.xml文件的作用及基本配置(转)
    资深高手谈接外包项目
  • 原文地址:https://www.cnblogs.com/simpledev/p/3980972.html
Copyright © 2011-2022 走看看