resttemplate 下载文件,resttemplate上传multipartfile

  resttemplate 下载文件,resttemplate上传multipartfile

  00-1010I、文件上传二、文件下载三、大文件下载本文是强化版RestTemplate的第六篇文章。上一篇文章的博客访问地址如下:

  RestTemplate采用春季或非春季环境下的强化授课。

  RestTemplate实现了各种底层HTTP客户端类库的切换使用。

  解释如何使用RestTemplate发送HTTPGET请求

  解释如何使用RestTemplate发送HTTPPOST请求

  RestTemplate的请求方法,比如DELETE和PUT,使用了密集授课。

  RestTemplate是一个HTTP客户端库,所以为了使用RestTemplate上传和下载文件,我们需要先在服务器上写一个支持文件上传和下载的程序。请参考我之前写的一篇文章:SpringBoot实现上传本地存储文件,提供HTTP访问服务。根据本文完成学习后,您可以获得

  具有访问服务URI /upload 的文件上载服务端点

  在端点成功上传文件后,它将返回一个HTTP连接,该连接可用于下载文件。

  让我们来学习如何使用RestTemplate作为HTTP客户端库来上传和下载文件。

  00-1010编写一个单元测试类,完成RestTemplate文件上传功能。具体实现细节请参考代码注释。

  @ spring boot test class UpDownLoadTests { @ Resource private rest template rest template;@Test void testUpload() {//文件上传服务上传接口字符串URL= 3358 localhost 33608888/upload ;//要上传的文件(客户端本地磁盘存在)字符串文件路径= d : data local splash . png ;//封装请求参数文件系统资源resource=新文件系统资源(新文件(文件路径));MultiValueMapString,Object param=new linkedmultimevaluemap();param.add(uploadFile ,resource);//server multipartfileuploadfile//param . add( param 1 , test );//如果服务器接受附加参数,可以通过//发送请求,输出结果System.out.println( -开始上传文件-);string result=rest template . postforobject(URL,param,string . class);System.out.println( -访问地址:结果);}}输出结果如下:

  -开始上传文件-访问地址:3358 localhost 33608888/2020/08/12/028 b38 f1-3F9b-4088-9 bea-1 F8 c18d 619 . png。

  文件上传后,可以通过上面的访问地址在浏览器中访问。或者通过RestTemplate客户端下载。

  00-1010执行以下代码后,下载文件的url会正确保存到本地磁盘目录targetPath。

  @ test void test download()ThrowsioException {//要下载的文件的地址string URL= 3358 localhost 33608888/2020/08/12/028 b 38 f 1-3F9b-4088-9 bea-1 F8 c18d 619 . png ;response entity byte[]RSP=rest template . getforentity(URL,byte[]。类);System.out.println(文件下载请求结果状态码: RSP . getstatuscode());//将下载的文件内容保存到本地string target path= d : data local splash-down . png ;files . write(paths . get(target path),objects . requirenononull(RSP . getbody(),未获得下载文件));}这种下载方式实际上是将下载的文件一次性加载到客户端的本地内存中,然后将文件从内存写入磁盘。这种方法也适合下载小文件。如果文件很大或者文件的并发下载量很大,很容易占用大量内存,从而降低应用的运行效率。

  00-1010这种下载方式的区别在于

  设置请求报头APPLICATION_OCTET_STREAM,指示以流的形式加载数据。

  RequestCallback结合File.copy保证在接收到一部分文件内容时,将一部分内容写入磁盘。而不是全部装入内存,最后写入磁盘文件。

  @Testvoid testDownLoadBigFile()抛出IOException { //待下载的文件地址string URL= http://localhost :8888/2020/08/12/028 b 38 f 1-3f9b-4088-9 bea-1 af 8 c 18 CD 619。png ;//文件保存的本地路径字符串目标路径= d : 数据 本地 splash-down-big。png ;//定义请求头的接收类型请求回调请求回调=请求-请求。获取标题().设置接受(数组。aslist(媒体类型.应用程序_八位字节_流,媒体类型.所有));//对响应进行流式处理而不是将其全部加载到内存中restTemplate.execute(url,HttpMethod .GET,requestCallback,clientHttpResponse-{ files。复制(clientHttpResponse。getbody(),路径。GET(目标路径));返回null });}以上就是客户端文件上传下载与大文件流式下载的详细内容,更多关于客户端大文件流式上传下载的资料请关注盛行信息技术其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: