首页 > 编程知识 正文

file(multipartfile获取文件名)

时间:2023-05-06 03:05:10 阅读:84535 作者:2492

你好。 因为最近在做需求的过程中遇到了文件上传这个东西,而且我还是跨服务传输文件,所以我这边用了http客户端和RestTemplate做了,但是最后用的http客户端。 因为feign和RestTemplate在超大型文件下OOM,所以适合传输小文件。 我这里测试的是1G以下。 http客户端就像无限哈哈哈。 (具体来说,有时间的话请测量一下) ) )。

1.被调用服务的Controller

1.您可以使用此@requestpart (“文件”)或@requestpart请求部件)“文件”)来接收参数。 2.)“文件”)必须与通过远程调用代码传递的参数名称相同,才能连接到参数。

@ request mapping (值=' /远程计算负载',方法=请求方法.后期) )。

@ApiOperation (“测试远程调用上载”) ) ) ) ) ) ) ) ) ) )。

公共资源调用文件(@请求参数('文件) )多文件) {

系统输出(文件;

返回成功;

使用}

1.RestTemplate

1.RestTemplate时,首先需要将resttemplate传递给spring进行管理,因此请先给我一个配置类。 2.@suppresswarnings(“all”)这句话意味着jdk所拥有意志的所有警告。

@Configuration

@suppresswarnings('all ' () ) () ) ) ) ) ) ) ) ) ) ) ) )至) ) ) )中的一个词。

公共类别还原模板配置{

@自动无线

resttemplatebuilder生成器;

@Bean

公共还原模板还原模板(

返回构建器.构建器(;

}

(}

2.RestTemplate远程调用文件传输

这里有几个需要注意的地方

1 .如果不改写的话,在传送时报告错误

bytearrayresourcebytearrayresource=newbytearrayresource (文件. getbytes ) ) )

@Override

公共字符串getfilename

返回文件. getoriginalfilename (;

}

(; 2 .设定请求标头为了通过模拟前端发送文件上载请求,请求标头必须是multipart/form-data

3 .第三个参数是Controller调用的返回值类型,我的测试Controller写的是String,所以这里的第三个参数是String.Class

rest template.postforobject (网址、文件、字符串.类); 4.url是像:一样调用的服务的地址

3358192.168.3.7336050003/test/remotecallupload以上是注意事项。

@自动无线

私有注册模板;

privatestringgettestresttemplate (多文件,字符串URL ) throws IOException {

httpheadersheaders=newhttpheaders (;

媒体类型=媒体类型.透视媒体类型(多媒体/表单-数据);

headers.set内容类型(类型;

MultiValueMapString,对象表格=newlinkedmultivaluemap (;

bytearrayresourcebytearrayresource=newbytearrayresource (文件. getbytes ) ) )

@Override

公共字符串getfilename

返回文件. getoriginalfilename (;

}

(;

form.add (“文件”,字节资源;

form.add ('文件名',文件.几何信息文件名) );

//用HttpEntity封装整个请求消息

HttpEntityMultiValueMapString,对象文件=newhttpentity (形式,头);

字符串标志=rest template.postforobject (URL,文件,字符串.类);

返回标志;

}

12345678910112131415161718192021223

3.HttpClient

1 .在使用http客户端时,首先引入pom文件坐标。

从属关系

组org.Apache.http组件/组id

artifactidhttpclient/artifact id

版本4.5.6 /版本

/从属关系

从属关系

组org.Apache.http组件/组id

影响ttpmime /影响id

版本4.5.6 /版本

/从属关系

12345678910

3.HttpClient远程调用文件传输

1.http客户端这个代码直接粘贴了要使用的合作伙伴,所以小心翼翼地自己更改返回值就行了。 execute.getEntity (

@SneakyThrows

privatestringgettesthttpclient (多端口文件,字符串文件) {

closeablehttpclienthttpclient=http clients.create默认(;

请求配置=请求配置. custom (

. setconnectionrequesttimeout (10000 )。

. setconnecttimeout(5000 ) )

. build (;

http后期http后期=新http后期(URL;

multipartentitybuilderentitybuilder=multipartentitybuilder.create (;

//解决中文文件名的乱码问题

实体生成器. setmode (httpmultipartmode .浏览器_兼容;

实体生成器. set charset (consts.utf _ 8;

内容类型内容类型=内容类型.创建(内容类型.文本_平面.获取时间类型),Consts.UTF_8);

实体生成器. addbinarybody (文件),文件获取输入),内容类型.默认_二进制,文件获取文件库

htppost.set entity (实体生成器.构建器);

htppost.set配置(请求配置);

httpresponse execute=http客户端. execute (http开机自检;

字符串标志=实体工具. tostring (执行.获取实体();

返回标志;

}

总结

远程呼叫可以使用RestTemplate和http客户端也可以使用feign,但是RestTemplate和feign的大文件变成了OOM,不能使用http客户端,所以大家都可以使用自己的client

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。