java收octet-stream后转multipart方案
解决了一个前端传过来是二进制流,但后端用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方案相关推荐
- java day24【Stream流、方法引用】
第一章 Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带来的 ...
- 【Java】流(Stream)快速入门
本文是面向Java初学者的流(Stream)学习指导教程.文章内容偏向怎么用,而弱化其诞生背景.流的概念.内部原理等说明解释性的语段. 主要内容: Optional 创建流 操作流 收集流 目录 什么 ...
- Java基础(十一) Stream I/O and Files
Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...
- 【Java】IO Stream详细解读
什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列. Java的I/O流提供了读写 ...
- linux加水印乱码,linux java程序加水印及中文乱码方案(二)
上一篇介绍了在linux, centos图片加水印出现乱码的解决方案,<linux java程序加水印及中文乱码方案>, 在真实项目环境下,一是部署在虚拟机服务器,还有项目部署在docke ...
- JAVA ImageIO图片处理后变色
JAVA ImageIO图片处理后变色问题 最初使用ImagIO.Read() 从InputStream 转成BufferImage 然后进行水印添加,普通图片没问题,但是当前端通过JS剪裁传入后就出 ...
- java中的Stream
1. Stream流 1.1. Stream流引入 Stream流完全不是I/O流,按照流水线处理方式来考虑代码中的思想. JDK1.8 之后,我们拥有了Lambda表达式,让代码的中心偏向解决实际问 ...
- SpringBoot 项目上传文件异常【java.io.IOException: Stream closed】
项目场景: 提示:这里简述项目相关背景: 项目场景:SpringBoot 项目上传文件接口异常 21 十二月 2022 13:30:53,132 36991 [http-nio-9220-exec-3 ...
- 生鲜收银系统有什么好方案
数字经济时代,一切能够提升效率和体验的事物,都该被充分利用.AI(人工智能)技术的出现,已经升级了很多重复性的.机械式的工作,解放的生产力被用来创造更大的社会价值.就拿最贴近民生的生鲜行业举例,生鲜收 ...
- 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 ...
最新文章
- 【自动驾驶】Eigen:矩阵Matrix的使用
- ES的多种搜索机制:query string search,query DSL,query filter,full-text search,phrase search,highlight search
- html语言中空格用什么表示,HTML中的5种空格各表示的意义
- D - F e n d 簡 單 教 學 DOSBOX Easy Shell 【玩DOS游戏的必备软件】
- 如何编写出拥抱变化的代码
- 树 | 突然间,看了这篇文章,树我懂了!
- Linux 命令(23)—— rm 命令
- SAP-MM知识精解-批次管理(01)- 概览及物料的批次启用
- 计算机科学自考本科的科目,自考本科计算机专业考哪些
- 微信公众号迁移办理流程及公证书办理方法
- 【民生】2011,骗子仍在行动
- for循环打印九九乘法表
- 【2022-9-21最新】青龙面板搭建+sillyGirl+对接微信公众号+onebot
- 【5】SCI易中期刊推荐——计算机科学(中科院2区)
- Android 通过MediaMetadataRetriever获取视频封面和时长
- 工业互联网数据展现软件之组态工具
- 怎样用python生成中文字符画_如何利用Python实现图片转字符画详解
- 插件 | 蛋白序列集合功能注释快速完成 - Quick Protein Anno
- 浅谈 leaflet 地图插件的使用(制作飞机航线图)
- 深入解析OkHttp3
热门文章
- 使用git上传代码遇到关于remote: Support for password authentication was removed on August 13, 2021.的问题
- c语言编程一个超市购物程序,急求一超市的销售记录C程序(各位大哥帮帮忙啊!)...
- 【debug】Support for password authentication was removed on August 13, 2021.解决
- 为什么说php开发成本低,PHP、JSP和.NET三种语言的对比中开发成本最低的是?
- 苹果手机换电池对手机有影响吗_苹果手机换电池去哪里换?这样操作既省钱又省力...
- Android异常篇 Cannot access com.***...***.class
- how to manage your time effectively!!
- 【学习笔记】计算机基础知识
- kubernetes 网络组件 calico 运行原理分析
- 信息检索1.2--几个实用的限定词,site title URL