SpringCloud feignを使用してダウンロードファイルサービスを呼び出す


カスタムディレクトリのタイトルをここに書きます
  • 消費者端末
  • feignクライアント
  • プロバイダ端末
  • controller層
  • service層
  • 消費者側
    消費者側が返すタイプは、ResponseEntityです.
    /**
         *        
         *
         * @return
         * @throws Exception
         */
        @RequestMapping(value = {"/HandboardAction/DownTreeTemplate"}, method = {RequestMethod.GET}, produces = {"application/json"})
        public ResponseEntity<byte[]> downTreeTemplate(HttpServletResponse dresponse) throws Exception {
            System.err.println("   》》》》》");
            ResponseEntity<byte[]> result = null;
            // feign    
            Response response = TreeService.downTreeTemplate();
            Response.Body body = response.body();
            try (InputStream inputStream = body.asInputStream();) {
                //      ,          
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] buf = new byte[10240];
                while (true) {
                    int len = inputStream.read(buf);
                    if (len < 0) {
                        break;
                    }
                    bos.write(buf, 0, len);
                }
    			//          ,  ResponseEntity  
                byte[] by = bos.toByteArray();
                System.err.println("         :" + by.length);
                //     
                HttpHeaders heads = new HttpHeaders();
                heads.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + new String("text.xls".getBytes(), "ISO8859-1"));
                heads.add(HttpHeaders.CONTENT_TYPE, "application/vnd.ms-excel;charset=utf-8");
    
                result = new ResponseEntity<byte[]>(by, heads, HttpStatus.OK);
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.err.println("    》》》》》");
            return result;
        }
    

    Feignクライアント
    Feignクライアントの戻り値は、HttpServeretResponse import feignではなく、feignが提供するResponseであることに注意する必要がある.Response;
    /**
         *     
         * @return
         */
        @RequestMapping(value = "/downTreeTemplate",method = {RequestMethod.GET},produces = {"application/json"})
        Response downTreeTemplate();
    

    プロバイダ側
    コントロール層
    @RequestMapping(value = {"/downTreeTemplate"}, method = {RequestMethod.GET})
        public void downTreeTemplate(HttpServletResponse response) {
            System.err.println("   》》》》》》");
            treeService.downTreeTemplate(response);
            System.err.println("    》》》》》》");
        }
    

    サービス層
    /**
         *        
         * 
         * @param response
         * @return
         */
        public void downTreeTemplate( HttpServletResponse response) {
            try {
                String filename = "text.xls";
                File downloadFile = new File("d:/com/"+filename);
                download(response,downloadFile,filename);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    /**
         *     
         *
         * @param response
         * @param downloadFile
         * @param fileName
         * @throws IOException
         */
        public static void download(final HttpServletResponse response, final File downloadFile, final String fileName) throws IOException {
    
            final File downloadFileTep = downloadFile;
            if (!downloadFileTep.exists()) {
                System.err.println("     》》》》》》》》》》");
                response.sendError(404, "File not found!");
                return;
            }
    
            try (final BufferedInputStream bufferStream = new BufferedInputStream(new FileInputStream(downloadFileTep))) {
                final byte[] buf = new byte[2048];
                int len;
                response.reset();
    //            response.setContentType("application/x-msdownload");
                response.setContentType("application/vnd.ms-excel;charset=utf-8");
                response.setHeader("Content-Disposition", "attachment;" +
                        "filename=" + new String(fileName.getBytes(), "ISO8859-1"));//            
                final OutputStream out = response.getOutputStream();
                int size =0;
                while ((len = bufferStream.read(buf)) > 0) {
                    out.write(buf, 0, len);
                    size += len;
                    System.err.println("     :"+size);
                }
                bufferStream.close();
                out.close();
            }
        }