图片上传时后台接收类型为 MultipartFile ,
而大部分的文件上传工具类 所使用的的也都是 MultipartFile
所以要通过 MultipartFile 获取IO流, 然后使用内存流接收压缩后的图片流,
然后将内存流 转换为 MultipartFile 使用

控制层

public Result uploadImgResultUrlOSS(@RequestParam("file") MultipartFile multiFile, String fileType, String ywTableName){try{// 压缩图片MultipartFile multipartFile = sysOssService.compressImg(multiFile);if (multipartFile != null) {// 图片上传return sysOssService.uploadFileResultUrlOSS(multipartFile, fileType, ywTableName);}else {return new Result().error("文件上传压缩异常!");}}catch (Exception e){if (e instanceof MessageException) {return new Result().error(e.getMessage());} else {return new Result().error("文件上传失败!");}}}

业务层

 /*** 压缩图片 并返回MultipartFile* @param multiFile* @return* @throws Exception*/@Overridepublic MultipartFile compressImg(MultipartFile multiFile) {// 压缩图片InputStream inputStream = null;ByteArrayOutputStream bos = null;MultipartFile multipartFile = null;InputStream fileInput= null;try {inputStream = multiFile.getInputStream();bos = new ByteArrayOutputStream();// 压缩图片核心代码Thumbnails.of(inputStream).scale(0.3f).outputQuality(1f).toOutputStream(bos);fileInput = new ByteArrayInputStream(bos.toByteArray());// 转换 MultipartFileString fieldName = multiFile.getName();String fileName = multiFile.getOriginalFilename();String contentType = multiFile.getContentType();multipartFile = FileUtils.getMulFileByFile(fileInput, fieldName, contentType, fileName);} catch (IOException e) {e.printStackTrace();} finally {try {if (inputStream != null){inputStream.close();}if (bos != null){bos.close();}if (fileInput != null){fileInput.close();}} catch (IOException e) {e.printStackTrace();}}return multipartFile;}

工具类

public static MultipartFile getMulFileByFile(InputStream fis,String fieldName,String contentType,String fileName) {FileItem fileItem = createFileItem(fis,fieldName,contentType,fileName);MultipartFile mfile = new CommonsMultipartFile(fileItem);return mfile;}public static FileItem createFileItem(InputStream fis,String fieldName,String contentType,String fileName){FileItemFactory factory = new DiskFileItemFactory(16, null);FileItem item = factory.createItem(fieldName, contentType, false,fileName);int bytesRead = 0;byte[] buffer = new byte[8192];try{OutputStream os = item.getOutputStream();while ((bytesRead = fis.read(buffer, 0, 8192))!= -1){os.write(buffer, 0, bytesRead);}os.close();fis.close();}catch (IOException e){e.printStackTrace();}return item;}

JAVA 上传图片时 压缩后上传相关推荐

  1. Bmob+Luban(鲁班)压缩图片实现相册选择图片压缩后上传到Bmob后台Glide加载图片显示到本地

    源代码已上传CSDN:https://download.csdn.net/download/qq_16519957/11068345 因为本章需要跟前面的知识结合起来看所以就做了一个前面链接方便大家查 ...

  2. js图片压缩后上传方法,图片超过1M先进行压缩,然后再上传

    js图片压缩后上传方法,图片超过1M先进行压缩,然后再上传 图片上传目录 js图片压缩后上传方法,图片超过1M先进行压缩,然后再上传 html代码 js代码 html代码 <input type ...

  3. H5调用手机摄像头拍照,如何压缩后上传

    H5调用手机摄像头拍照后,怎样压缩再上传? 实际的压缩功能,就是利用canvas画布功能,将图片进行裁剪后保存图片的base64数据流,然后上传. 案例全部代码,示下: <!DOCTYPE ht ...

  4. 前端获取图片压缩后上传给后台

    在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上 ...

  5. 图片上传压缩java_【java基础】压缩图片上传

    1.pom.xml net.coobird thumbnailator 0.4.8 2.代码 /** * 上传图片 */ @RequestMapping(method = RequestMethod. ...

  6. java上传图片损坏_iview 文件上传二进制文件提示文件已经损坏

    使用iview的 Upload组件结合后端spring mvc做的文件上传,发现文本文件格式上传没问题,但上传其他格式的,比如 doc.xls.jar等格式文件,上传到后端后,打开均会提示文件已经损坏 ...

  7. java上传图片方法_java 图片上传方法

    /*** 点击上传照片功能*/ publicString writeImg(){try{ HttpServletRequest request=WebUtils.getRequest();//requ ...

  8. 关于uniapp小程序压缩视频后上传云点播视频损坏这件事

    问题起因 公司自研项目 技术栈是 uniapp 开发微信小程序 小程序内有个需要用户录制视频并上传的功能 项目内使用的是 uni.createCameraContext 相机组件进行录制视频的 一开始 ...

  9. java 预览zip_java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载

    java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载 实现功能:zip文件上传,后台自动解压,Jstree树目录(遍历文件),editor.md预览 采用Spring+Sp ...

最新文章

  1. 【BZOJ4259】残缺的字符串
  2. 汉字转拼音插件:LM-PinYin.js
  3. VS2010静态编译生成.exe可执行文件
  4. 神策数据王灼洲 徐缓:ID-Mapping 用户打通那些事儿
  5. cocos2d-x游戏开发(十五)游戏加载动画loading界面
  6. 怎么讲d 盘里的软件弄到桌面_GNOME 2 粉丝喜欢 Mate Linux 桌面的什么?
  7. 【PyCharm】Pycharm使用技巧
  8. Java中使用MongoTemplate写聚合函数样例
  9. java技术类网站收录
  10. 解决Linux出现“cannot create temp file for here-document: No space left on device”的问题
  11. 简单的使用git克隆上传创建下载删除
  12. vmalloc与mmap
  13. java 学生签到考勤系统_学生考勤管理系统 用了ecplise编程实现Java+jsp+mysql数据库实现对学生的考勤管理签到和教师查看登陆注册以及一套完整的增删改查 - 下载 - 搜珍网...
  14. CTF密码学——常见编解码及加解密总结
  15. ubuntu 用apt安装预编译的preempt 实时操作系统内核
  16. 标准c语言教程gary,C语言标准教程
  17. Qt扫盲-QSqlQuery理论总结
  18. Qt图形视图QGraphicsItem类
  19. 每日一道Leetcode -网格矩阵中的路径相关系列【动态规划|路径中(不)含值|有无障碍物|最小路径和】
  20. 众包置信度:改进众包数据标记的贝叶斯推断

热门文章

  1. 小会计去财务公司代理记账,还有前途吗
  2. iOS 程序员必须收藏的资源大全
  3. Linux企业运维——LVS负载均衡
  4. Docker安装Oracle11c
  5. 华为hcie认证重要吗?华为hcie必看的NETCONF 基本介绍
  6. RK3399驱动开发 | 07 - GT911触摸屏驱动调试及问题分析解决(基于RK SDK Linux 4.4.194内核)
  7. 笔记本电脑连接服务器的显示器不亮,笔记本显示器不亮了怎么办 解决方案【详解】...
  8. gojs-go.Panels(面板元素)
  9. webpack5+vue3+element-plus 导入AutoImport报错问题
  10. Excel 排序时标题移动