最近接到了做在线文档编辑的需求,普通的rpc接口比如dubbo或者spring cloud的feign对文件流操作支持并不太好,所以用原生的httpClient先写一个出来。

上传文件

    // upload_url为上传文件的接口调用地址HttpPost httpPost = new HttpPost(upload_url);// 使用try resource进行httpClient的关闭try (CloseableHttpClient httpClient = HttpClients.createDefault()) {URL url = new URL(downloadUri);java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();InputStream stream = connection.getInputStream();if (stream == null) {throw new Exception("Stream is null");}// 使用表单形式提交参数MultipartEntityBuilder fileBuilder = MultipartEntityBuilder.create();fileBuilder.setMode(HttpMultipartMode.RFC6532);// file为提交参数名,stream为要上传的文件的文件流 inputStream,最后一个参数为上传文件名称fileBuilder.addBinaryBody("file", stream, ContentType.create("multipart/form-data"), FileUtility.GetFileName(url.getPath()));HttpEntity fileEntity = fileBuilder.build();httpPost.setEntity(fileEntity);HttpResponse uploadResponse = httpClient.execute(httpPost);StatusLine statusLine = uploadResponse.getStatusLine();// 响应码int statusCode = statusLine.getStatusCode();// 请求成功if (statusCode == 200) {HttpEntity entity = uploadResponse.getEntity();log.info("返回结果为 " + EntityUtils.toString(entity));}// 断开链接connection.disconnect();} catch (Exception ex) {saved = 1;} finally {if (httpPost != null) {httpPost.releaseConnection();}}

下载文件

 HttpGet httpGet = null;String localFileName = null;String fileOriName = null;try (CloseableHttpClient httpClient = HttpClients.createDefault()) {// 这里我设置了超时时间的配置,也可以不设RequestConfig timeoutConfig = RequestConfig.custom().setConnectTimeout(5000).setConnectionRequestTimeout(1000).setSocketTimeout(5000).build();// download_url为下载文件接口地址,fileId是我自己文件接口定义的文件标识// 本例的文件下载接口是直接返回的文件流httpGet = new HttpGet(download_url + fileId);httpGet.setConfig(timeoutConfig);HttpResponse downLoadResponse = httpClient.execute(httpGet);StatusLine statusLine = downLoadResponse.getStatusLine();// 响应码int statusCode = statusLine.getStatusCode();// 请求成功if (statusCode == 200) {// 获取接口返回的文件流HttpEntity entity = downLoadResponse.getEntity();InputStream input = entity.getContent();// 本例是储存到本地文件系统,fileRealName为你想存的文件名称File dest = new File(DocumentManager.StoragePath(fileRealName, null));OutputStream output = new FileOutputStream(dest);int len = 0;byte[] ch = new byte[1024];while ((len = input.read(ch)) != -1) {output.write(ch, 0, len);}}} catch (Exception e) {log.error("", e);} finally {if (httpGet != null) {httpGet.releaseConnection();}}

对接onlyOffice文档编辑

我们目前有自己的文件服务器,onlyOffice在不变动前端Js代码的情况下,只能使用项目下target里的本地文件,所以就有了开头的两个需求。
我目前设计的流程是这样的,
1.前端调用文件服务器上传文件 --> 2.文件服务器返回文件id --> 3.前端拿文件id传到文档编辑接口(文档编辑接口会根据文件id从文件服务器下载文件到target下并返回onlyOffice的格式) --> 4.当文档被编辑后,前端调用文件回写接口,把更改后的文件传到文档编辑接口 --> 5.文档编辑接口根据文件Id,调用文件服务器更改文件内容接口把文件覆盖传上去。
具体onlyOffice详情和概述请参考以下链接,我认为写的比较清楚了。
https://blog.51cto.com/dengshuangfu/2154826

java使用HttpClient调用rest接口上传下载文件相关推荐

  1. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

  2. JAVA使用HttpClient调用webservice接口

    JAVA使用HttpClient调用webservice接口 关于HttpClient用法参考: HttpClient-4.5.2官方教程完整翻译 官方教程原文链接 HttpClient下载地址: 链 ...

  3. java 百度网盘上传_使用pcs api往免费的百度网盘上传下载文件的方法

    百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...

  4. java 上传文件及预览_SpringBoot上传下载文件及在线预览

    SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...

  5. HttpClient上传下载文件

    HttpClient上传下载文件 java HttpClient Maven依赖 <dependency><groupId>org.apache.httpcomponents& ...

  6. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  7. java 文件上传到ftp_JAVA技术实现上传下载文件到FTP服务器(完整)

    具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于 ...

  8. java ftp ftpclient_详解JAVA中使用FTPClient工具类上传下载

    详解JAVA中使用FTPClient工具类上传下载 在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件.本文简单介绍如何利用jakarta commons中的FTPClie ...

  9. JavaWeb:上传下载文件

    1. 文件上传概述 1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: ...

最新文章

  1. 用了ReSharpe硬是爽
  2. 菜鸟要飞java_Java Android视频教程 下载
  3. 3.注释(代码的整洁之道)
  4. android引入开源库_为好目录引入开源:通过代码帮助公益组织
  5. JS逆向笔记-记录某测试论坛的js逆向练习
  6. ActionBar返回键图标怎么搞小点?
  7. Swiper插件的基本使用方法和案例
  8. [转载] 【Python进阶】4-2 多态 | 什么是多态 / 静态语言vs动态语言 / python中多态
  9. Python3 高级用法
  10. linux界面安装mysql_linux安装mysql可视化界面
  11. 开发者头条(一):导航页
  12. KingbaseES和PostgreSQL兼容
  13. 电脑主板深度睡眠设置
  14. React Native组件之Switch和Picker和Slide
  15. 准程序员应如何使用Ipad!!!
  16. Python——绑定与方法调用
  17. Spring Boot普通参数与基本注解
  18. Java集合之Set集合
  19. 【SpringCloud】ZuulFilter过滤器
  20. Java开发 - 消息队列之RabbitMQ初体验

热门文章

  1. android touch事件无反应,移动端touch事件
  2. The road to learn react学习笔记
  3. Start My JS Road
  4. Qt中国象棋二——棋盘与棋子的绘制
  5. 网易极客战记-KITHGARD地牢--再下一步 (需解锁)
  6. 孤立森林算法matlab实现,隔离林在MATLAB和python中的简单应用,isolationforest,上
  7. 如何实现互联网支付功能
  8. ABP vnext知识整理
  9. GAN如此简单的PyTorch实现,一张脸生成72种表情(附代码)
  10. 股市精忠社杨忠国在线体验:华为“全家桶”补全