美文网首页
SpringBoot从别的服务器上下载单个文件以及多个文件打成压

SpringBoot从别的服务器上下载单个文件以及多个文件打成压

作者: 清风欢明月渡 | 来源:发表于2021-04-20 12:06 被阅读0次
    /**
     * 单个文件下载
     */
    @RequiresPermissions("system:appraising:detail")
    @GetMapping("/downloadOneFile/{fileId}")
    public void fileDownload(@PathVariable("fileId") Long fileId,HttpServletResponse response, HttpServletRequest request) throws Exception {
        UserAttachVo userAttachVo;
        if(null != fileId) {
            userAttachVo = iUserAttachService.findUserAttachByFileId(fileId);
            // 文件的名称
            String downloadFilename = userAttachVo.getFileName();
            BufferedOutputStream os = new BufferedOutputStream(response.getOutputStream());
            try {
                // 转换中文否则可能会产生乱码
                downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");
                // 指明response的返回对象类型
                response.setHeader("Content-type", userAttachVo.getFileType());
                // 设置在下载框默认显示的文件名
                response.setHeader("Content-Disposition","attachment;filename=" + downloadFilename);

                // 去服务器上下载文件并下载
                HttpURLConnection conn = (HttpURLConnection) new URL(userAttachVo.getFilePath()).openConnection();
                conn.setReadTimeout(6000);
                conn.setConnectTimeout(6000);
                conn.setRequestMethod("GET");
                BufferedInputStream fis = null;
                if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    fis = new BufferedInputStream(conn.getInputStream());
                }
                byte[] buffer = new byte[1024];
                int r = 0;
                if(null != fis) {
                    while ((r = fis.read(buffer)) != -1) {
                        os.write(buffer, 0, r);
                        os.flush();
                    }
                    fis.close();
                }
            } catch (Exception e) {
                log.error("下载文件失败", e);
            } finally {
                os.flush();
                os.close();
            }
        }
    }

    /**
     * 文件打成压缩包下载
     */
    @RequiresPermissions("system:appraising:detail")
    @GetMapping("/downloadFile")
    public void downloadFile(String appraisingId, String appraisingName, String userName, HttpServletResponse response, HttpServletRequest request) throws Exception {
        List<UserAttachVo> userAttachVos;
        if(null != appraisingId) {
            ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
            try {
                userAttachVos = iUserAttachService.findUserAttachByAppraisingId(Long.valueOf(appraisingId));
                // 文件的名称
                String downloadFilename = appraisingName + userName + ".zip";
                // 转换中文否则可能会产生乱码
                downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");
                // 指明response的返回对象是文件流
                response.setContentType("application/octet-stream");
                // 设置在下载框默认显示的文件名
                response.setHeader("Content-Disposition","attachment;filename=" + downloadFilename);

                // 将文件打成压缩包并下载
                for(UserAttachVo userAttach : userAttachVos) {
                    String url = userAttach.getFilePath();
                    zos.putNextEntry(new ZipEntry(userAttach.getFileName()));
                    HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
                    conn.setReadTimeout(5000);
                    conn.setConnectTimeout(5000);
                    conn.setRequestMethod("GET");
                    BufferedInputStream fis = null;
                    if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                        fis = new BufferedInputStream(conn.getInputStream());
                    }
                    byte[] buffer = new byte[1024];
                    int r = 0;
                    if (null != fis) {
                        while ((r = fis.read(buffer)) != -1) {
                            zos.write(buffer, 0, r);
                        }
                        fis.close();
                    }
                }
            } catch (Exception e) {
                log.error("下载文件失败", e);
            } finally {
                zos.flush();
                zos.close();
            }
        }

    }

相关文章

网友评论

      本文标题:SpringBoot从别的服务器上下载单个文件以及多个文件打成压

      本文链接:https://www.haomeiwen.com/subject/kexnlltx.html