@Controller
@Slf4j
@RequestMapping("/service/dist")
public class DistributionController {

//下载文件的接口
 @GetMapping("/f/{op}/{fakename}")
    public void downloadFile(Model model, @PathVariable("op") String op,
                             @PathVariable("fakename") String fakeName,
                             HttpServletRequest request, HttpServletResponse response){
        
        String originalName = "";
        String fullFilePath = "";
        try{            
            //相对于根目录的相对路径
 String storepath = "";
 
            //文件根目录
 String fileStoreRootPath= "";
 
            //获取文件
 File srcfile=new File(fileStoreRootPath,storepath);
 
            //绝对路径
 fullFilePath = srcfile.getPath();

//doDownload方法见https://blog.csdn.net/daqinzl/article/details/120216664
            HttpDownloadUtil.doDownload (request, response, originalName, fullFilePath,"application/pdf", true);

}
        catch (Exception e) {
            log.error("downloadFile" + originalName + " " + fullFilePath + " " + e.getMessage(),e);
            String errMsg = e.getMessage();
        }
    }   
}
--接口调用

String receiveUri = "http://192.168.1.100:7001/service/dist/f/bc9594e5-6e29-4118-b201-dc1c9c72929f/fake";
 String tmpPath = "D:/test.xx";
 receiveFile(receiveUri, tmpPath);

public void receiveFile( String receiveUri, String tmpPath) {

CloseableHttpClient httpclient = null;
        try {
            httpclient = HttpClients.custom().build();
            HttpEntity entity;

/
 HttpGet httpget = new HttpGet(receiveUri);
            HttpResponse response1 = null;
            try {
                response1 = httpclient.execute(httpget); // 用HttpResponse,不用CloseableHttpResponse
 } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

entity = response1.getEntity();
// System.out.println("get: " + response1.getStatusLine());
 ///

InputStream is;
            try {
                is = entity.getContent();
                File file = new File(tmpPath);
                if (!file.exists()) {
                    file.createNewFile();
                }

OutputStream os = new FileOutputStream(file);

int read = 0;
                byte[] temp = new byte[1024 * 1024];

while ((read = is.read(temp)) > 0) {
                    os.write(temp, 0, read);
                }
                os.flush();
                os.close();
                is.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedOperationException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

} finally {
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

}

提供一个文档下载接口,用httpclient下载文件相关推荐

  1. 对接接口文档_接口自动化测试框架设计思路

    接口自动化测试--框架设计思路 1 前言 之前文章跟大家分享了一下自己在接口自动化测试中进行测试准备的一些相关知识点,接下来本篇文章详细分享一下接口自动化框架设计的思路总结,希望能对初次探索接口自动化 ...

  2. elasticsearch 第五篇(文档操作接口)

    INDEX API 示例: 1 2 3 4 5 PUT /test/user/1 { "name": "silence", "age": 2 ...

  3. api数据接口文档_接口文档示例(Taobao/jd/pinduoduo/开放接口调用)

    api数据接口文档_接口文档示例 本文主要是提供了一个接口文档的范文,内容修订历史.目录.时序图.接口要素描述.接口说明.使用示例.字典.FAQ.  使用MD格式文档(makedown),选择原因,容 ...

  4. Word控件Spire.Doc 【段落处理】教程(五):如在 C#、VB.NET 中将 Word 段落从一个文档复制到另一个文档

    复制 Word 段落时,用户可以选择仅复制文本或复制段落的所有元素,例如格式.图像.超链接等.本指南中的解决方案介绍了如何在 C# 中将 Word 段落(文本和格式)从一个文档复制到另一个文档和VB. ...

  5. Word处理控件Aspose.Words功能演示:使用 Python 将 Word 文档的内容复制到另一个文档

    在各种情况下,您可能需要将 Word 文档的内容复制到另一个文档中.此外,您可能需要创建原始 Word 文档的克隆.为了自动化这些操作,本文介绍了如何在 Python 中将内容从一个 Word 文档复 ...

  6. Word处理控件Aspose.Words功能演示:在 Java 中将内容从 Word 文档复制到另一个文档

    Aspose API 支持旗下产品覆盖文档.图表.PDF.条码.OCR.CAD.HTML.电子邮件等各个文档管理领域,为全球.NET .Java.C ++等10余种平台开发人员提供丰富的开发选择. 在 ...

  7. html文档使用,使用提供 HTML 文档的过程

    使用提供 HTML 文档的过程 通常,编写一个可处理发送给特定服务的请求的过程是最简单的方式.这样的过程将返回一个 Web 页.或者,该过程也可接受作为 URL 的一部分进行传递的参数以对其输出进行自 ...

  8. ElasticSearch什么是文档?索引一个文档

    什么是文档? 程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串.数字.布尔类型.另一个对象. ...

  9. 使用OpenCV实现一个文档自动扫描仪

    导读 本文主要介绍如何使用 OpenCV + GrabCut实现一个文档自动扫描仪.(公众号:OpenCV与AI深度学习) 背景介绍 文档扫描是将物理文档转换为数字形式的过程.可以通过扫描仪或手机摄像 ...

  10. VuePress构建一个文档管理网站

    序言 目前无论笔记还是项目文档,大部分我都会通过 Markdown来记录,并且大部分文档写完都只存在自己电脑上,每次查找起来都需要耗费一些时间 自己的写的一部分技术教程由于初次记录时了解知识不多,内容 ...

最新文章

  1. android 键盘只顶edittext,EditText Keyboard 未解之谜
  2. Intel X86 CPU系列的寄存器
  3. 京东商城pop开放平台产品经理
  4. window中搭建jenkins_Windows环境中的jenkins构建时报错
  5. C++ STL string 简单使用
  6. python实现logistic回归对样本量有要求么_logistic回归样本量多少合适?
  7. 2018值得一看的GAN论文回顾
  8. 关于SPARK_WORKER_MEMORY和SPARK_MEM
  9. 如何快速的入门Docker并且实现部署
  10. undefined reference to libiconv_open'
  11. R语言之探索性数据分析篇
  12. CurrentUser获取不到当前登录用户name
  13. 手机电子词典_一个落榜生的醒悟:我的梦想,是手机夺走的!
  14. [持续更新]先进OpenGL编程注意事项
  15. 运动会比赛计分系统c语言课程设计,c语言课程设计运动会比赛计分系统(含任务书).doc...
  16. dilink虚拟服务器怎么设置,最简单的dlink路由器设置教程
  17. 关于符合车规的高精度定位产品
  18. 8K视频大?带你来算算
  19. phpstudy_pro 安装匹配Composer
  20. vue 使用animate.css动画库

热门文章

  1. 用java实现飞机大战_java飞机大战实现了什么技术
  2. oppo锁屏断网设置在哪里呀_oppo锁屏时钟怎么改格式?锁屏时钟位置在哪里设置调整...
  3. STM32F429第四篇之跑马灯程序详解
  4. 原码,补码,反码概念和计算方法详解
  5. matlab加载fuzzy模块,FuzzyDEMATEL的matlab实现
  6. 1024 科学计数法 (20 分) C语言
  7. imnoise, imnoise2 imnoise3
  8. SAP-ABAP-查找后台表修改记录
  9. Unity 如何实现批量修改图片格式
  10. 高一计算机基础知识课程ppt课件,高一计算机基础课件.ppt