当前位置: 代码迷 >> 综合 >> Pentaho 调用API根据指定路径下载文件
  详细解决方案

Pentaho 调用API根据指定路径下载文件

热度:118   发布时间:2023-09-06 23:23:32.0

Pentaho官网文档:https://help.pentaho.com/Documentation/8.2/Developer_Center/Embed_Pentaho_Server

api : /pentaho/api/repos/ /generatedContent

这里 的格式需要注意一下

代码如下:

工具类:

public class HttpUtils {public static OutputStream doPostStream(String url, Map<String, String> params, int timeout){OutputStream os = null;CloseableHttpClient httpClient =  HttpClients.createDefault();try{//超时设置RequestConfig requestConfig =  RequestConfig.custom().setConnectTimeout(timeout) //连接超时.setConnectionRequestTimeout(timeout)//请求超时.setSocketTimeout(timeout).setRedirectsEnabled(true)  //允许自动重定向.build();HttpPost httpPost  = new HttpPost(url);httpPost.setConfig(requestConfig);httpPost.addHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");Map<String, String> headers = new HashMap<> ();headers.put("Authorization", "Basic " + Base64.encodeBase64String("Admin:password".getBytes()));for (Map.Entry<String, String> e : headers.entrySet()) {httpPost.addHeader(e.getKey(), e.getValue());}List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();Iterator iterator = params.entrySet().iterator();while(iterator.hasNext()){Entry<String,String> elem = (Entry<String, String>) iterator.next();list.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));}if(list.size() > 0){UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, HTTP.UTF_8);httpPost.setEntity(entity);}CloseableHttpResponse httpResponse = httpClient.execute(httpPost);HttpEntity httpEntity = httpResponse.getEntity();if(httpResponse.getStatusLine().getStatusCode() == 200){InputStream in = httpEntity.getContent();os = new ByteArrayOutputStream();int temp = 0;while ((temp = in.read()) != -1) {os.write(temp);}os.flush();os.close();EntityUtils.consume(httpEntity);return os;}}catch (Exception e){e.printStackTrace();}finally {try{httpClient.close();}catch (Exception e){e.printStackTrace();}}return null;}}

测试用例:将文件通过浏览器下载下来

@RequestMapping("/test")
public void test (HttpServletResponse response, HttpServletRequest request) throws IOException {OutputStream out = response.getOutputStream();Map<String, String> param = new HashMap<> ();// 这里格式参考官方文档,根据自己需要下载的文件格式传参
//		obj1.put("output-target", "table/html;page-mode=page");param.put("output-target", "pageable/pdf");OutputStream os=HttpUtils.doPostStream("http://192.168.129.138:8080/pentaho/api/repos/:home:leo:test1.prpt/generatedContent", param, 2000);String finalFileName = "123";final String userAgent = request.getHeader("USER-AGENT");if(StringUtils.contains(userAgent, "MSIE")||StringUtils.contains(userAgent,"Trident")){//IE浏览器finalFileName = URLEncoder.encode(finalFileName,"UTF8");}else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器finalFileName = new String(finalFileName.getBytes(), "ISO8859-1");}else{finalFileName = URLEncoder.encode(finalFileName,"UTF8");//其他浏览器}response.setCharacterEncoding("UTF-8");response.setContentType("application/pdf");response.addHeader("Content-Disposition", "attachment;fileName=" + finalFileName + ".pdf");// 设置文件名ByteArrayOutputStream baos = new ByteArrayOutputStream();baos=(ByteArrayOutputStream) os;ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());int temp = 0;while ((temp = swapStream.read()) != -1) {out.write(temp);}os.flush();os.close();}