首页 > 编程语言 >java代码转发文件流,前端下载文件流

java代码转发文件流,前端下载文件流

时间:2023-02-24 18:11:48浏览次数:35  
标签:文件 httpGet java xhr 转发 catch null response httpClient

后端文件流转发代码
public static void doGetFile(HttpServletResponse httpResponse,String url) { CloseableHttpClient httpClient = null; CloseableHttpResponse response = null; byte[] result = null; try { // 通过址默认配置创建一个httpClient实例 httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); // 设置请求头信息,鉴权 //httpGet.setHeader("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0"); // 设置配置请求参数 RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间 .setConnectionRequestTimeout(35000)// 请求超时时间 .setSocketTimeout(60000)// 数据读取超时时间 .build(); if (summaryVer != null) { httpGet.setHeader("sd-summary-ver", summaryVer); httpGet.setHeader("sd-summary", summary); } // 为httpGet实例设置配置 httpGet.setConfig(requestConfig); // 执行get请求得到返回对象 response = httpClient.execute(httpGet); // 通过返回对象获取返回数据 HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); byte[] buffer = new byte[1024*4]; int n = 0; ServletOutputStream outputStream = httpResponse.getOutputStream(); while (-1 != (n = content.read(buffer))) { outputStream.write(buffer, 0, n); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { // 关闭资源 if (null != response) { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } }

前端代码
function downloadFile() {
const xhr = new XMLHttpRequest();
xhr.open('POST', 'url(下载接口地址)', true);
xhr.responseType = "blob";
xhr.onload = () => {
    openProgressBar("close", true, "下载");
    const blob = xhr.response;
    const blobUrl = URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.style.display = 'none';
    a.download="数据列表.xls"
    a.href = blobUrl;
    a.target = '_blank';
    a.click();
}
var params2 = {"flowType":3,"pageNum":1,"pageSize":10}
xhr.setRequestHeader("Content-Type","application/json;charset=UTF-8");
xhr.send(JSON.stringify(params2));
}

标签:文件,httpGet,java,xhr,转发,catch,null,response,httpClient
From: https://www.cnblogs.com/zhangandong/p/17152695.html

相关文章

  • java 反射
    总结一句话就是:在程序运行中根据业务需要由jvm动态获取Class对象来创建对象、执行方法等操作。是动态和灵活的而不是事先代码写死获取Class三种方法:类.class;对象.g......
  • ASP.NET文件夹上传解决方案
    ​ 1 背景用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文......
  • java int 引用传递
    integer是final,不可变的,所以也无法实现引用传递的功能。解决方案int[]做一个包装类org.apache.commons.lang.mutable.MutableIntjava.util.concurrent.atomic.Atomi......
  • Java的特性和优点,三大版本,JDK,JRE,JVM
    Java的特性和优点面对对象跨平台性简单高性能分布式动态性多线程安全的健壮的Java的三大版本JavaSE:标准版(桌面程序,控制台开发...)JavaME:......
  • Java判断字符串是否为数字(正负、小数)
    BooleanstrResult=number.matches("-?[0-9]+.*[0-9]*");if(strResult){ //将字符串转换成Double类型 doublen=Double.valueOf(number); //四舍五入保留两位 Bi......
  • 【后端过程记录】用flask搭建服务器作后端接收数据 将base64字符串码解码为可读取文件
    因为项目的原因了解到有一个python的flask框架,查了一下:关于前端图片上传的canvas:如下元素<canvasid="canvas"width="5"height="5"></canvas>可以用这样的方式获......
  • Java力扣
    目录JZ6从尾到头打印链表JZ24反转链表JZ25合并两个排序的链表JZ52两个链表的第一个公共结点JZ23链表中环的入口结点JZ6从尾到头打印链表JZ24反转链表JZ25合并......
  • Java多线程学习路线
    在学习之前,需要对线程的概念和多线程编程的常见问题有基本理解。1线程Thread(重要)Runnable(重要)Callable和FutureTask(重要)CompletableFuture2线程池ThreadPool......
  • JAVA文件夹上传解决方案
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1. 通过form表单向后端发送请求    ......
  • PageOffice在线打开编辑Word文件获取指定区域的数据并且保存整篇文件
    一、首先在word文件中给需要在后台获取数据的区域设置以PO_开头的书签。二、通过pageoffice在线打开文件并编辑保存。有两种打开文件的模式1、普通编辑模式(docNormalEdi......