阿里云图片压缩上传代码

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;
    }
时间: 2024-10-08 22:21:59

阿里云图片压缩上传代码的相关文章

阿里云图片压缩

后台用户上传的图片往往很大,并且现在iphone手机的图片质量大的都高达几M,而在移动端展示时,即便做了懒加载,如vue-lazyLoad,也会很影响性能.移动端的图片一般控制在100K以内,否则3g网络加载太慢,会出现白屏现象.目前遇到的场景,图片都存放在阿里云的cdn上,从而可以采用阿里云的图片质量变换进行压缩图片. 阿里云图片压缩https://help.aliyun.com/document_detail/32243.htmle.g. <img :src="detailData.l

Html5+asp.net mvc 图片压缩上传

在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法得到base64字符串来实现压缩. 废话不多少不多说直接看代码: 本次测试使用了 zepto.min.js 插件,更新版本的下载请点击这里 主要js代码: //图片压缩处理 ; (function () { /** * 加载的时候进行抽样检测 * 在iOS中,大于2M的图片会抽样渲染 */ func

android图片压缩上传系列-service篇

本篇文章是继续上篇android图片压缩上传系列-基础篇文章的续篇.主要目的是:通过Service来执行图片压缩任务来讨论如何使用Service,如何处理任务量大的并发问题. 了解下Service 大家都知道如果有费时任务,这时需要将任务放到后台线程中执行,如果对操作的结果需要通过ui展示还需要在任务完成后通知前台更新.当然对于这种情况,大家也可以在Activity中启动线程,在线程中通过Handler和sendMessage来通知Activity并执行更新ui的操作,但是更好的方法是将这些操作

springMVC多图片压缩上传的实现

前台代码: <form id="userForm" method="post" enctype="multipart/form-data"> <div> <label class="my_input_title">图片1:</label> <input type="file" name="file" class=""

上传代码至服务器

对于很多前端开发者都不知道如何上传代码到服务器,一般是打包后发送给后台人员进行上传,但是有的公司又是需要前端开发者自己上传代码的,通过可视化上传工具例如xftp等的方式我就不多做介绍了,直接登入后,找到对应的地方直接拖拽或者右击上传即可 通过xshell进行上传代码至服务器时 举例:这里就用vue项目来做讲解,你首先需要cnpm run buid 后将产生的dist文件夹进行压缩zip格式,不是vue的直接压缩即可 然后,你打开xshell,新建一个回话,输入相关信息,连接上后,后台会告诉你一个

HTML5 图片本地压缩上传插件

======================前端代码========================= <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>localResizeIMG</title> <!--引入JQuery 用于异步上传图片--> <script type="text/javascript"

PHP实现阿里云OSS文件上传(支持批量)

上传文件至阿里云OSS,整体逻辑是,文件先临时上传到本地,然后在上传到OSS,最后删除本地的临时文件(也可以不删,具体看自己的业务需求),具体实现流程如下: 1.下载阿里云OSS对象上传SDK(PHP版) 通过Github下载 2.解压后,可自行修改目录名称,以下为本人项目实例(aliyun_oss改过之后的名称) 项目目录结构如下: 3.Index.php 为文件上传静态表单页 4.do_upload.php 为文件处理控制页,封装的代码如下:上传文件相关的辅助函数可以自行封装,本文是为了便于

如何上传代码到github?

如何上传代码到github? 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路直接安装即可: https://git-for-windows.github.io/ 1.进入Github首页,点击New repository新建一个项目  2.填写相应信息后点击create即可 Repository name: 仓库名称 Description(可选): 仓库描述介绍 Public,

[github]Github上传代码

最近需要将课设代码上传到Github上,之前只是用来fork别人的代码. 这篇文章写得是windows下的使用方法. 第一步:创建Github新账户 第二步:新建仓库 第三部:填写名称,简介(可选),勾选Initialize this repository with a README选项,这是自动创建REAMDE.md文件,省的你再创建. 第四步:安装Github shell程序,地址:http://windows.github.com/ 第五步:打开Git Shell,输入以下命令生成密钥来验