mywlbc 2022-10-19 20:14 采纳率: 0%
浏览 42
已结题

java通过get请求下载文件到本地存放的代码

求java通过get请求下载文件到本地存放的代码
比如从下面这个链接下载到pdf文件
https://bswj.fpggfwpt.guangxi.chinatax.gov.cn:19001/api?action=getDoc&code=045002100111_596880_2022015_A6F4A0H2&type=12
在网路上找了好多代码,都无法使用

  • 写回答

1条回答 默认 最新

  • 夜郎king 2022博客之星IT其它领域TOP 12 2022-10-20 08:10
    关注

    您好,一般针对这种需求,可以有以下的实现方式:
    1、针对这种pdf类的文件,可以直接通过http服务把文件放出来,可以直接进行文件的预览,一般的比如chrome浏览器会自带了下载功能。
    2、自己手写代码的方式,可以参考以下的代码:

     @GetMapping("/download")
     public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request){
            try {
                if (!FileUtils.checkAllowDownload(fileName)){
                    throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
                }
                String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
                String filePath = HngtghyConfig.getDownloadPath() + fileName;
                response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
                FileUtils.setAttachmentResponseHeader(response, realFileName);
                FileUtils.writeBytes(filePath, response.getOutputStream());
                if (delete){
                    FileUtils.deleteFile(filePath);
                }
            }catch (Exception e) {
                log.error("下载文件失败", e);
            }
        }
    
    /**
         * 输出指定文件的byte数组
         * 
         * @param filePath 文件路径
         * @param os 输出流
         * @return
         */
        public static void writeBytes(String filePath, OutputStream os) throws IOException
        {
            FileInputStream fis = null;
            try
            {
                File file = new File(filePath);
                if (!file.exists())
                {
                    throw new FileNotFoundException(filePath);
                }
                fis = new FileInputStream(file);
                byte[] b = new byte[1024];
                int length;
                while ((length = fis.read(b)) > 0)
                {
                    os.write(b, 0, length);
                }
            }
            catch (IOException e)
            {
                throw e;
            }
            finally
            {
                IOUtils.close(os);
                IOUtils.close(fis);
            }
        }
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月26日
  • 修改了问题 10月21日
  • 创建了问题 10月19日