当前位置:   article > 正文

Java读取第三方接口文件流返回前端预览、或保存文件(HttpURLConnection方式)_接口返回文件

接口返回文件
  1. package com.example.demo;
  2. import cn.hutool.core.util.IdUtil;
  3. import org.springframework.util.FileCopyUtils;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import javax.servlet.ServletOutputStream;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.*;
  11. import java.net.HttpURLConnection;
  12. import java.net.URL;
  13. import java.net.URLEncoder;
  14. import static org.apache.catalina.manager.Constants.CHARSET;
  15. @RestController
  16. @RequestMapping("file")
  17. public class TestController {
  18. /**
  19. * 前端下载文件
  20. * @param response
  21. * @throws UnsupportedEncodingException
  22. */
  23. @GetMapping(value = "/test1")
  24. public void test(HttpServletResponse response) throws UnsupportedEncodingException {
  25. // 设置编码
  26. response.setCharacterEncoding("UTF-8");
  27. response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
  28. response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("test.pdf", "UTF-8"));
  29. String path = "D://test.pdf";
  30. try {
  31. FileInputStream in = new FileInputStream(new File(path));
  32. FileCopyUtils.copy(in, response.getOutputStream());
  33. } catch (FileNotFoundException e) {
  34. System.out.println("文件不存在");
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. /**
  40. * 前端预览文件
  41. * @param response
  42. * @throws IOException
  43. */
  44. @RequestMapping("download")
  45. public void download(HttpServletResponse response) throws IOException {
  46. String filePath = "D:\\test.pdf";
  47. System.out.println("filePath:" + filePath);
  48. File f = new File(filePath);
  49. if (!f.exists()) {
  50. response.sendError(404, "File not found!");
  51. return;
  52. }
  53. BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
  54. byte[] bs = new byte[1024];
  55. int len = 0;
  56. response.reset(); // 非常重要
  57. URL u = new URL("file:///" + filePath);
  58. String contentType = u.openConnection().getContentType();
  59. response.setContentType(contentType);
  60. response.setHeader("Content-Disposition", "inline;filename="
  61. + "test.pdf");
  62. // 文件名应该编码成utf-8,注意:使用时,我们可忽略这句
  63. OutputStream out = response.getOutputStream();
  64. while ((len = br.read(bs)) > 0) {
  65. out.write(bs, 0, len);
  66. }
  67. out.flush();
  68. out.close();
  69. br.close();
  70. }
  71. /**
  72. * 调用第三方流接口, 将文件保存到本地、读取本地文件返回前端预览
  73. * @param response
  74. * @throws IOException
  75. */
  76. @RequestMapping("test2")
  77. public void test2(HttpServletResponse response) throws IOException {
  78. HttpURLConnection urlConnection = null;
  79. FileOutputStream fileOutputStream;
  80. InputStream inputStream;
  81. String fileName = IdUtil.nanoId();
  82. try {
  83. URL url = new URL("http://localhost:8080/file/download");
  84. urlConnection = (HttpURLConnection) url.openConnection();
  85. urlConnection.setRequestMethod("POST");
  86. urlConnection.setConnectTimeout(20000);
  87. urlConnection.setDoOutput(true);
  88. urlConnection.setDoInput(true);
  89. urlConnection.setUseCaches(false);
  90. urlConnection.setRequestProperty("Content-Type", "application/json; charset=" + CHARSET);
  91. urlConnection.connect();
  92. File file = new File("D://"+fileName+".pdf");
  93. if (!file.getParentFile().exists()) {
  94. file.getParentFile().mkdirs();
  95. }
  96. if (!file.exists()) {
  97. file.createNewFile();
  98. }
  99. inputStream = urlConnection.getInputStream();
  100. BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
  101. fileOutputStream = new FileOutputStream("D://"+fileName+".pdf");
  102. BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
  103. byte[] buf = new byte[4096];
  104. int length = bufferedInputStream.read(buf);
  105. while (-1 != length) {
  106. bufferedOutputStream.write(buf, 0, length);
  107. length = bufferedInputStream.read(buf);
  108. }
  109. bufferedInputStream.close();
  110. bufferedOutputStream.close();
  111. } catch (Exception e) {
  112. System.out.println("getFile error: " + e);
  113. } finally {
  114. if (null != urlConnection) {
  115. urlConnection.disconnect();
  116. }
  117. }
  118. String filePath = "D://"+fileName+".pdf";
  119. File f = new File("D://"+fileName+".pdf");
  120. if (!f.exists()) {
  121. response.sendError(404, "File not found!");
  122. return;
  123. }
  124. BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
  125. byte[] bs = new byte[1024];
  126. int len = 0;
  127. response.reset(); // 非常重要
  128. URL u = new URL("file:///" + filePath);
  129. String contentType = u.openConnection().getContentType();
  130. response.setContentType(contentType);
  131. response.setHeader("Content-Disposition", "inline;filename="
  132. + fileName + ".pdf");
  133. // 文件名应该编码成utf-8,注意:使用时,我们可忽略这句
  134. OutputStream out = response.getOutputStream();
  135. while ((len = br.read(bs)) > 0) {
  136. out.write(bs, 0, len);
  137. }
  138. out.flush();
  139. out.close();
  140. br.close();
  141. }
  142. /**
  143. * 调用第三方流接口, 将文件流返回前端预览
  144. * @param request
  145. * @param response
  146. */
  147. @RequestMapping("test3")
  148. public void test3(HttpServletRequest request, HttpServletResponse response) {
  149. HttpURLConnection urlConnection = null;
  150. InputStream inputStream;
  151. try {
  152. URL url = new URL("http://localhost:8080/file/download");
  153. urlConnection = (HttpURLConnection) url.openConnection();
  154. urlConnection.setRequestMethod("POST");
  155. urlConnection.setConnectTimeout(20000);
  156. urlConnection.setDoOutput(true);
  157. urlConnection.setDoInput(true);
  158. urlConnection.setUseCaches(false);
  159. urlConnection.setRequestProperty("Content-Type", "application/json; charset=" + CHARSET);
  160. urlConnection.connect();
  161. inputStream = urlConnection.getInputStream();
  162. BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
  163. byte[] buf = new byte[4096];
  164. int length = bufferedInputStream.read(buf);
  165. ServletOutputStream out = response.getOutputStream();
  166. while (-1 != length) {
  167. out.write(buf, 0,length);
  168. length = bufferedInputStream.read(buf);
  169. }
  170. out.flush();
  171. out.close();
  172. bufferedInputStream.close();
  173. } catch (Exception e) {
  174. System.out.println("getFile error: " + e);
  175. } finally {
  176. if (null != urlConnection) {
  177. urlConnection.disconnect();
  178. }
  179. }
  180. }
  181. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/207088
推荐阅读
相关标签
  

闽ICP备14008679号