java使用HttpClient调用rest接口上传下载文件
最近接到了做在线文档编辑的需求,普通的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接口上传下载文件相关推荐
- java文件客户端下载_使用Java写一个minio的客户端上传下载文件
标签:color ati tty java system wired format media param 前言: 确保已经安装了minio的服务端 代码: pom.x ...
- JAVA使用HttpClient调用webservice接口
JAVA使用HttpClient调用webservice接口 关于HttpClient用法参考: HttpClient-4.5.2官方教程完整翻译 官方教程原文链接 HttpClient下载地址: 链 ...
- java 百度网盘上传_使用pcs api往免费的百度网盘上传下载文件的方法
百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...
- java 上传文件及预览_SpringBoot上传下载文件及在线预览
SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...
- HttpClient上传下载文件
HttpClient上传下载文件 java HttpClient Maven依赖 <dependency><groupId>org.apache.httpcomponents& ...
- java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解
下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...
- java 文件上传到ftp_JAVA技术实现上传下载文件到FTP服务器(完整)
具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于 ...
- java ftp ftpclient_详解JAVA中使用FTPClient工具类上传下载
详解JAVA中使用FTPClient工具类上传下载 在Java程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件.本文简单介绍如何利用jakarta commons中的FTPClie ...
- JavaWeb:上传下载文件
1. 文件上传概述 1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: ...
最新文章
- 用了ReSharpe硬是爽
- 菜鸟要飞java_Java Android视频教程 下载
- 3.注释(代码的整洁之道)
- android引入开源库_为好目录引入开源:通过代码帮助公益组织
- JS逆向笔记-记录某测试论坛的js逆向练习
- ActionBar返回键图标怎么搞小点?
- Swiper插件的基本使用方法和案例
- [转载] 【Python进阶】4-2 多态 | 什么是多态 / 静态语言vs动态语言 / python中多态
- Python3 高级用法
- linux界面安装mysql_linux安装mysql可视化界面
- 开发者头条(一):导航页
- KingbaseES和PostgreSQL兼容
- 电脑主板深度睡眠设置
- React Native组件之Switch和Picker和Slide
- 准程序员应如何使用Ipad!!!
- Python——绑定与方法调用
- Spring Boot普通参数与基本注解
- Java集合之Set集合
- 【SpringCloud】ZuulFilter过滤器
- Java开发 - 消息队列之RabbitMQ初体验
热门文章
- android touch事件无反应,移动端touch事件
- The road to learn react学习笔记
- Start My JS Road
- Qt中国象棋二——棋盘与棋子的绘制
- 网易极客战记-KITHGARD地牢--再下一步 (需解锁)
- 孤立森林算法matlab实现,隔离林在MATLAB和python中的简单应用,isolationforest,上
- 如何实现互联网支付功能
- ABP vnext知识整理
- GAN如此简单的PyTorch实现,一张脸生成72种表情(附代码)
- 股市精忠社杨忠国在线体验:华为“全家桶”补全