解决了一个前端传过来是二进制流,但后端用multipartfile收不到的问题。
因为octet-stream二进制流收到的是乱码,所以需要用inputstream自己转一层。
且二进制流不能区分多个参数,只能穿一个文件(变成二进制)过来。

    @RequestMapping(value = "/image/uploadV2", method = RequestMethod.POST)@ResponseBodypublic Response uploadPddImageV2(FileUploadDto fileUploadDto, HttpServletRequest request) throws Exception {if (request.getContentType().contains("multipart/form-data")) {// 安卓端走这个return uploadPddImage(fileUploadDto, request);}// ios端走这个 - application/octet-stream// 这边都是打印请求参数Enumeration enumeration = request.getHeaderNames();while ((enumeration.hasMoreElements())) {String name = (String) enumeration.nextElement();logger.biz("[uploadPddImageV2] headers : " + name + " : " + request.getHeader(name));}Enumeration enumeration1 = request.getParameterNames();while (enumeration1.hasMoreElements()) {String name = (String) enumeration1.nextElement();logger.biz("[uploadPddImageV2] params : " + name + " : " + JSON.toJSONString(request.getParameter(name)));}//  这个是前端通过hearder传过来的文件类型:jpeg,jpg,pngString imgType = request.getHeader("img-type");// 文件格式校验if ("jpeg".equals(imgType) || "jpg".equals(imgType)) {imgType = MediaType.IMAGE_JPEG_VALUE;} else if ("png".equals(imgType)) {imgType = MediaType.IMAGE_PNG_VALUE;} else {throw new Exception("文件格式错误");}//  生成本地临时文件的保存路径String filePath = "/usr/local/tomcat/" + System.currentTimeMillis() + "." + imgType;Path dest = Paths.get(filePath);try {// 转成对应的文件FileCopyUtils.copy(request.getInputStream(), Files.newOutputStream(dest));} catch (Exception e) {logger.error("[uploadPddImageV2] 转换文件失败...", e);}// 把转成的file文件转成multiPartFile,然后再调用原先的方法。用完记得删除本地临时文件File localFile = new File(filePath);if (localFile != null) {fileUploadDto = new FileUploadDto();fileUploadDto.setFile(getMultipartFile(localFile, imgType));fileUploadDto.setImageType(1);String path = imageService.uploadImage(fileUploadDto, getSessionUser());// 用完以后删除文件localFile.delete();return response(ImmutableMap.of("picUrl", path));}return new Response();}// 这是一个file转multiPartFile的方法,imgType为前端传过来,然后用MediaType获取到的文件类型public static MultipartFile getMultipartFile(File file, String imgType) {FileItem item = new DiskFileItemFactory().createItem("file", imgType, true, file.getName());try (InputStream input = new FileInputStream(file);OutputStream os = item.getOutputStream()) {// 流转移IOUtils.copy(input, os);} catch (Exception e) {throw new IllegalArgumentException("Invalid file: " + e, e);}return new CommonsMultipartFile(item);}```

java收octet-stream后转multipart方案相关推荐

  1. java day24【Stream流、方法引用】

    第一章 Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带来的 ...

  2. 【Java】流(Stream)快速入门

    本文是面向Java初学者的流(Stream)学习指导教程.文章内容偏向怎么用,而弱化其诞生背景.流的概念.内部原理等说明解释性的语段. 主要内容: Optional 创建流 操作流 收集流 目录 什么 ...

  3. Java基础(十一) Stream I/O and Files

    Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...

  4. 【Java】IO Stream详细解读

    什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列. Java的I/O流提供了读写 ...

  5. linux加水印乱码,linux java程序加水印及中文乱码方案(二)

    上一篇介绍了在linux, centos图片加水印出现乱码的解决方案,<linux java程序加水印及中文乱码方案>, 在真实项目环境下,一是部署在虚拟机服务器,还有项目部署在docke ...

  6. JAVA ImageIO图片处理后变色

    JAVA ImageIO图片处理后变色问题 最初使用ImagIO.Read() 从InputStream 转成BufferImage 然后进行水印添加,普通图片没问题,但是当前端通过JS剪裁传入后就出 ...

  7. java中的Stream

    1. Stream流 1.1. Stream流引入 Stream流完全不是I/O流,按照流水线处理方式来考虑代码中的思想. JDK1.8 之后,我们拥有了Lambda表达式,让代码的中心偏向解决实际问 ...

  8. SpringBoot 项目上传文件异常【java.io.IOException: Stream closed】

    项目场景: 提示:这里简述项目相关背景: 项目场景:SpringBoot 项目上传文件接口异常 21 十二月 2022 13:30:53,132 36991 [http-nio-9220-exec-3 ...

  9. 生鲜收银系统有什么好方案

    数字经济时代,一切能够提升效率和体验的事物,都该被充分利用.AI(人工智能)技术的出现,已经升级了很多重复性的.机械式的工作,解放的生产力被用来创造更大的社会价值.就拿最贴近民生的生鲜行业举例,生鲜收 ...

  10. java创建的窗口无法关闭_在Java中添加canvas后无法关闭窗口(Can't close window after adding canvas in Java)...

    在Java中添加canvas后无法关闭窗口(Can't close window after adding canvas in Java) public class Screen extends Ca ...

最新文章

  1. 【自动驾驶】Eigen:矩阵Matrix的使用
  2. ES的多种搜索机制:query string search,query DSL,query filter,full-text search,phrase search,highlight search
  3. html语言中空格用什么表示,HTML中的5种空格各表示的意义
  4. D - F e n d 簡 單 教 學 DOSBOX Easy Shell 【玩DOS游戏的必备软件】
  5. 如何编写出拥抱变化的代码
  6. 树 | 突然间,看了这篇文章,树我懂了!
  7. Linux 命令(23)—— rm 命令
  8. SAP-MM知识精解-批次管理(01)- 概览及物料的批次启用
  9. 计算机科学自考本科的科目,自考本科计算机专业考哪些
  10. 微信公众号迁移办理流程及公证书办理方法
  11. 【民生】2011,骗子仍在行动
  12. for循环打印九九乘法表
  13. 【2022-9-21最新】青龙面板搭建+sillyGirl+对接微信公众号+onebot
  14. 【5】SCI易中期刊推荐——计算机科学(中科院2区)
  15. Android 通过MediaMetadataRetriever获取视频封面和时长
  16. 工业互联网数据展现软件之组态工具
  17. 怎样用python生成中文字符画_如何利用Python实现图片转字符画详解
  18. 插件 | 蛋白序列集合功能注释快速完成 - Quick Protein Anno
  19. 浅谈 leaflet 地图插件的使用(制作飞机航线图)
  20. 深入解析OkHttp3

热门文章

  1. 使用git上传代码遇到关于remote: Support for password authentication was removed on August 13, 2021.的问题
  2. c语言编程一个超市购物程序,急求一超市的销售记录C程序(各位大哥帮帮忙啊!)...
  3. 【debug】Support for password authentication was removed on August 13, 2021.解决
  4. 为什么说php开发成本低,PHP、JSP和.NET三种语言的对比中开发成本最低的是?
  5. 苹果手机换电池对手机有影响吗_苹果手机换电池去哪里换?这样操作既省钱又省力...
  6. Android异常篇 Cannot access com.***...***.class
  7. how to manage your time effectively!!
  8. 【学习笔记】计算机基础知识
  9. kubernetes 网络组件 calico 运行原理分析
  10. 信息检索1.2--几个实用的限定词,site title URL