/**
* 获取上传文件
*
* @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;
}
/**
* 判断图片类型
*
* @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;
}
/**
* 压缩图片(没有原图)
* 默认输出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;
}
#阿里云oos
endPoint = oss-cn-beijing.aliyuncs.com
accessKeyId = LTAI9rV1x0TmtGjq
accessKeySecret = 3QCJw4MhlyZC8zQUATKaLxWZpk4bFY
bucketName = songsiraliyun
urlKey = images/
fileUrlKey = files/
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");
/**
* 上传压缩图片到阿里云
*
* @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));
}
} 参考文档:
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. Flutter学习笔记(32)--PointerEvent事件处理

    如需转载,请注明出处:Flutter学习笔记(32)--PointerEvent事件处理 在Android原生的开发中,对于事件的处理,我们都知道事件分为down.move.up事件,对于ViewGr ...

  2. 【K8S学习笔记】初识K8S 及架构组件

    K8S是什么?发展历史 Kubernetes (简称 k8s)是 Google 在2014年开源的,对容器生命周期管理的开源平台,致力于对容器集群提供易于管理.高可用.弹性负载与故障转移的能力,提高服 ...

  3. WeChair项目Alpha冲刺(1/10)

    团队项目进行情况 1.昨日进展    因为是Alpha冲刺第一天,所以昨日进展无 2.今日安排 前端:完成前端页面的首页html+css部分 后端:搭建好SpringBoot项目以及完成实体类代码的编 ...

  4. 这篇文章,我们来谈一谈Spring中的属性注入

    本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...

  5. mysql定时备份任务

    简介 在生产环境上,为了避免数据的丢失,通常情况下都会定时的对数据库进行备份.而Linux的crontab指令则可以帮助我们实现对数据库定时进行备份.首先我们来简单了解crontab指令,如果你会了请 ...

  6. 【String注解驱动开发】你了解@PostConstruct注解和@PreDestroy注解吗?

    写在前面 在之前的文章中,我们介绍了如何使用@Bean注解指定初始化和销毁的方法,小伙伴们可以参见<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!& ...

  7. Spring和Springboot相关知识点整理

    简介 本文主要整理一些Spring & SpringBoot应用时和相关原理的知识点,对于源码不做没有深入的讲解. 1. 思维导图 右键新窗口打开可以放大. 说明 使用@Configurati ...

  8. Python3-socketserver模块-网络服务器框架

    Python3中的socketserver模块简化了编写网络服务器的任务 在实际的开发中,特别是多并发的情况下,socket模块显然对我们的用处不大,因为如果你要通过socket模块来实现并发的soc ...

  9. 解决IE浏览器中点击按钮上传无效的问题

    前几天写了上传功能,点击按钮上传,在谷歌中是没有任何问题的: 但是在IE浏览器中点击没有任何效果 源代码如下:  后来发现在Firefox.IE浏览器中button标签内部可以含有其他标签,但是不能对 ...

  10. VS2017 快捷键

    VS2017注释:先CTRL+K 然后CTRL+C   (ctrl按住不松,松开k按c) 取消注释:先CTRL+K,然后CTRL+U  (ctrl按住不松,松开k按c)