文档章节

spring 获取postman上传的二进制文件

yeyi771
 yeyi771
发布于 2016/12/12 15:58
字数 351
阅读 502
收藏 0

最近做一个上传图片接口,之前是把图片二进制流转成 base64 字符串上传,这样传输量会比直接传二进制大不少。所以就想着直接传二进制流。

网上有很多方法,但自己能走通的就只有两种,一种是直接获取 request 中的IO流,从里面取二进制流就行。但如果传多个文件时,上传与接收端要区分文件很麻烦。

另外一种就比较方便(使用MultipartHttpServletRequest):

        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
            MultipartFile mf = entity.getValue();
            byte[] byteArray = mf.getBytes(); // 二进制流
            String realName = mf.getOriginalFilename(); // 文件名
            String fileExt = realName.substring(realName.lastIndexOf(".") + 1);
            String name = realName.substring(0, realName.indexOf(fileExt) - 1 );
            // ......
        }

由于默认情况下 request 是 HttpServletRequest 类型而不是 MultipartHttpServletRequest ,因此直接强转会报错。还要配置一下 xml 将 HttpServletRequest 转成 MultipartHttpServletRequest 类型:

<!-- make sure: MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8"></property>
		<property name="maxUploadSize" value="50000000"></property>
		<property name="maxInMemorySize" value="4096"></property>
	</bean>

 

想了解原理,可以看看

org.springframework.web.servlet.DispatcherServlet

里的代码:
private MultipartResolver multipartResolver; // 就是由这个接口把 HttpServletRequest 转成其它类型的

而 xml 中引用的 CommonsMultipartResolver 实现了 MultipartResolver 接口。因此可以知道是由

CommonsMultipartResolver  把普通的 HttpServletRequest  转成了 MultipartHttpServletRequest。

 

postman 则要使用 form-data模式上传图片:

注意文件必须前面给一个字段名,如图: image

© 著作权归作者所有

共有 人打赏支持
yeyi771
粉丝 3
博文 17
码字总数 3007
作品 0
广州
程序员
SpringBoot | 第十七章:web应用开发之文件上传

前言 上一章节,我们讲解了利用实现前端页面渲染,从而实现动态网页的功能,同时也提出了兼容项目的解决方案。既然开始讲解web开发了,我们就接着继续往这个方向继续吧。通常,我们在做开发时...

oKong
08/08
0
0
ModelMap 与 BindingAwareModelMap 解析数据时有什么差异吗?

spring boot 环境下 写了一个上传图片接口 , 1.在参数中的ModelMap 自动实例化 为 BindingAwareModelMap, 在postman 中测试接口 发现图片已经成功上传,但是结果 控制台显示如下 2018-05-15 1...

只做你的小飞哥
05/15
0
0
spring-boot整合spring-data-jpa

一、创建spring-boot工程 新建spring-boot项目,选择项目类型为gradle project,勾选初始化依赖如下: 删除resources下application.properties,创建application.yml文件(.yml与.properties...

louieSun
06/04
0
0
Spring mvc :Required String parameter 'oid' is not present

环境:Spring 4.3.1 通过Postman进行测试时提示出错 出现这个问题感到很奇怪,在另外一个项目中也是进行如此的使用,都没有出现这种情况,也是通过同样的方式进行接口测试。 通过查看Request...

皮蛋猫
2016/08/25
458
0
spring mvc文件上传实现进度条

文件上传应该大部分人都接触过,一般都是基于commons-fileupload组件来实现,SpringMVC的文件上传功能也是在commons-fileupload组件提供的功能上面做了一些包装功能,使文件上传开发更容易方...

小天120
2014/02/10
0
20

没有更多内容

加载失败,请刷新页面

加载更多

下一页

angular指令监听ng-repeat渲染完成后执行自定义事件方法

今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令。 在ng-repeat模板实例内部会暴露出一些特殊属...

孟飞阳
40分钟前
1
0
URLEncoder和URLDecoder

public static void main(String[] args) { String str1 = "https://test1-life.pingan.com/ilifecore/productMall/loading.html?productId=8000000241&channelCode=XCX00001&productCode=00......

鬼才王
49分钟前
2
0
对象及变量的并发访问-第一篇

方法内部的变量为线程安全变量 “非线程安全”问题存在于“共享变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题,所得结果也就是“线程安全”的。 package chaprer3;/**...

简心
50分钟前
1
0
程序媛眼中的程序猿原来是这样子的!

一直都想写一篇关于描述程序员的文章,但是一直没能开头,一来因为文笔不好,更主要的原因是貌似对程序员既熟悉又不熟悉,很怕写出来的是以偏概全,给大家造成对程序员的既定印象,不过,管他...

Java小铺
今天
1
0
bean标签

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 bean标签 bean标签中的init-method属性,该属性...

凯哥学堂
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部