1. /**
    * 获取上传文件
    *
    * @param r
    * @Return: com.oreilly.servlet.multipart.FilePart
    */
    public static FilePart fileuploads(HttpServletRequest r) {
    boolean flag = false;
    MultipartParser mp;
    try {
    mp = new MultipartParser(r, 52428800, false, false, "UTF-8");
    Part part = null;
    while ((part = mp.readNextPart()) != null) {
    String name = part.getName();
    if (part.isFile()) {
    FilePart filePart = (FilePart) part;
    return filePart;
    }
    }
    } catch (IOException e) {
    e.printStackTrace();
    return null;
    }
    return null;
    }
  1. /**
    * 判断图片类型
    *
    * @param ImgType
    * @Return: java.lang.String
    */
    public static String judgeImgType(String ImgType) {
    Map<String, String> imgMap = new HashMap<>();
    imgMap.put("images", "gif,jpg,jpeg,png,bmp");
    String imgType = "";
    if (StringUtils.isNotBlank(ImgType)) {
    if (Arrays.<String>asList(imgMap.get("imgaes").split(",")).contains(ImgType)) {
    imgType = ImgType;
    } else {
    imgType = "false:文件格式错误";
    }
    }
    return imgType;
    }
  1. /**
    * 压缩图片(没有原图)
    * 默认输出25%质量图片
    *
    * @param image
    * @return
    * @throws IOException
    */
    public static InputStream compress(BufferedImage image, String readImageFormat) throws IOException {
    InputStream in = ImageUtils.getInputStream(image, readImageFormat);
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    Thumbnails.of(in).size(image.getWidth(), image.getHeight()).outputQuality(0.25f).toOutputStream(os);
    InputStream is = new ByteArrayInputStream(os.toByteArray());
    in.close();
    os.close();
    return is;
    }
  1. #阿里云oos
    endPoint = oss-cn-beijing.aliyuncs.com
    accessKeyId = LTAI9rV1x0TmtGjq
    accessKeySecret = 3QCJw4MhlyZC8zQUATKaLxWZpk4bFY
    bucketName = songsiraliyun
    urlKey = images/
    fileUrlKey = files/
  1. public static String REQHEAD = PropKit.get("reqHead");
    public static String ENDPOINT = PropKit.get("endPoint");
    public static String ACCESSKEYID = PropKit.get("accessKeyId");
    public static String ACCESSKEYSECRET = PropKit.get("accessKeySecret");
    public static String BUCKETNAME = PropKit.get("bucketName");
    public static String URLKEY = PropKit.get("urlKey");
    public static String FILEURLKEY = PropKit.get("fileUrlKey");
  1. /**
    * 上传压缩图片到阿里云
    *
    * @Return: void
    */
    public void uploadByAliYun() throws IOException {
    FilePart fileUploads = HttpUtil.fileuploads(getRequest());
    String trimFileName = fileUploads.getFileName().trim();
    String subName = trimFileName.substring(0, trimFileName.lastIndexOf("."));
    String fileType = trimFileName.substring(trimFileName.lastIndexOf("."));
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
    String realName = "";
    //修改文件名,如果相同就会被覆盖掉
    realName = simpleDateFormat.format(new Date()) + "-" + RandCharsUtils.getRandomString(16) + fileType;
    BufferedImage bufferedImage = ImageIO.read(fileUploads.getInputStream());
        判断文件大小
    if (bufferedImage.getWidth() * bufferedImage.getHeight() <= 104857600) {
    String fileExt = fileUploads.getFileName().substring(fileUploads.getFileName().lastIndexOf(".") + 1).toLowerCase();
    String judgeImgType = ImageUtils.judgeImgType(fileExt);
          //判断文件类型
    if (StringUtils.isNotBlank(judgeImgType) && !StringUtils.contains(judgeImgType, "false")) {
            //开始压缩图片
    InputStream compress = ImageUtils.compress(bufferedImage, judgeImgType);
            //上传到阿里云
    OSSClient ossClient = new OSSClient(REQHEAD + ENDPOINT, ACCESSKEYID, ACCESSKEYSECRET);
    ossClient.putObject(BUCKETNAME, URLKEY + realName, compress);
    ossClient.shutdown();
    Record record = new Record();
    record.set("url", REQHEAD + BUCKETNAME + '.' + ENDPOINT + '/' + URLKEY + realName);
    renderJson(setResult(record));
    } else {
    Map<String, String> resMap = new HashMap<>(16);
    resMap.put("code", "5000");
    resMap.put("msg", "上传图片失败");
    renderJson(setResult(resMap));
    }
    } else {
    Map<String, String> resMap = new HashMap<>(16);
    resMap.put("code", "5000");
    resMap.put("msg", "上传" + subName + "图片过大");
    renderJson(setResult(resMap));
    }
    }
  2.  
  3. 参考文档:
    https://blog.csdn.net/distinctive_MAN/article/details/83622757
    https://blog.csdn.net/songsir001/article/details/86311137
    https://help.aliyun.com/document_detail/84798.html?spm=a2c4g.11186623.6.798.65df39a5DivjqP
    https://blog.csdn.net/leimenghongchen1/article/details/52949175

压缩并上传图片到阿里云(jfinal)的更多相关文章

  1. 上传图片到阿里云OSS和获取上传图片的外网url的步骤

    啥都不说  直接上代码 1.html: <form action="/bcis/api/headImgUpload.json" method="post" ...

  2. swift3.0 从相册选取或者拍照上传图片至阿里云OSS

    导入相应的库 import Photos import AliyunOSSiOS 选取照片需要继承 UIImagePickerControllerDelegate,UINavigationContro ...

  3. multipartUpload上传图片到阿里云

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. vue 上传图片到阿里云(前端直传:不推荐)

    为何要这样做:减轻后端数据库压力(个人觉得于前端没啥用,谁返回来都行) 代码部分: <template> <div class="upLoad"> < ...

  5. Java中使用RestFul接口上传图片到阿里云OSS服务器

    1.接口方法 import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.springfr ...

  6. vue中上传图片至阿里云oss

    1.开通阿里云的oss服务这些这里就不多做介绍了 2.登入阿里云的后台管理系统创建一个Bucket 3.在后台管理系统中进入访问控制 4.点击用户管理->新建用户->填写相关信息,就生成了 ...

  7. 上传图片到阿里云oss

    阿里云地址 登录阿里云管理控制台,创建对象存储oss private static final String endpoint = "http://oss-cn-shanghai.aliyu ...

  8. TP框架上传图片至阿里云oss

    首先安装阿里云oss扩展: composer require aliyuncs/oss-sdk-php 如果这个安装不上可以直接下载SDK的包: 链接:https://pan.baidu.com/s/ ...

  9. PHP上传图片至阿里云

    <?php header("Content-type: text/html; charset=utf-8"); header('Access-Control-Allow-Or ...

随机推荐

  1. 【JMeter_02】JMeter目录结构与功能模块介绍

    安装包目录结构 1.backups: 存放jmeter对脚本的自动备份保存文件 2.bin:jmeter的可执行文件目录,包含启动.配置等相关文件 3.dosc:程序自带的官方文档本地存放目录 4.e ...

  2. selenium(6)-截取完整页面和指定元素并保存为图片

    截图操作 截取整个页面 截取指定元素 只有这2个方法 比较简单,见下图代码 from selenium import webdriver driver = webdriver.Chrome(" ...

  3. Kali中密码暴力破解工具hydra的使用

    前言 hydra是著名黑客组织thc的一款开源的暴力破解密码工具,功能非常强大,kali下是默认安装的,几乎支持所有协议的在线破解.密码能否破解,在于字典是否强大.本文仅从安全角度去讲解工具的使用,请 ...

  4. 单元测试中使用mock最好不要使用easymock而应该使用powermock

    视频参考汪文君powermock视频教程相当的经典

  5. mybatis视频教程2-动态参数

    /MyBatis_04_DynamicSQL/src/com/atguigu/mybatis/dao/EmployeeMapperDynamicSQL.java package com.atguigu ...

  6. EnvironmentPostProcessor

    概览 SpringBoot支持动态的读取文件,留下的扩展接口 org.springframework.boot.env.EnvironmentPostProcessor,进行配置文件的集中管理,从而避 ...

  7. 手把手教你把web应用丢到服务器上(单页应用+ 服务端渲染)

    前两篇文章中,我分别介绍了框架的搭建利用vue-cli + vant搭建一个移动端开发模板,并且把项目中axios请求和vuex的用法做了简要的介绍如何在项目里管理好axios请求与vuex.在这两篇 ...

  8. 优雅关闭服务下线(Jetty)

    在很多时候 kill -9 pid并不是很友好的方法,那样会将我们正在执行请求给断掉,同时eureka 中服务依旧是处于在线状态,这个时候我们可以使用官方提供的actuator来做优雅的关闭处理 - ...

  9. 20 个 CSS高级样式技巧汇总

    使用技巧会让人变的越来越懒,没错,我就是想让你变懒.下面是我收集的CSS高级技巧,希望你懒出境界. 1. 黑白图像 这段代码会让你的彩色照片显示为黑白照片,是不是很酷? img.desaturate ...

  10. angular入门--自定义过滤器

    <html ng-app='app1'> <head> <meta name="generator" content="HTML Tidy ...