实现附件以压缩包形式下载 – hutool版

最近对附件文件下载代码进行了简易的优化

下面出现的HttpUtil、FileUtil、ZipUtil都是Hutool工具包里提供的工具类。

    private final static String DOWNLOAD = "download";
    // 附件下载
    public void downloadFile(HttpServletRequest request,HttpServletResponse response){
        // 创建临时目录 可加 uid 放并发操作
        File file = new File(uid + DOWNLOAD);
        if(!file.exists()){
            file.mkdir();
        }
        // 创建多级目录
        for(FileEntity item:fileList){
            String filePath = uid + DOWNLOAD+"/"+item.getName()+"/"+item.getType();
            File fileDri = new File(filePath);
            if(!fileDri.exists()){
                file.mkdirs();
            }
            File fileOut = HttpUtil.downloadFileFromUrl(item.getUrl(),fileDri);
            // 重命名 + uid 防止重名
            fileOut.renameTo();
        }
        File fileZip = ZipUtil.zip(file);
        response.setContentType("application/zip");
        response.setHeader("Content-Disposition","attachment;filename="+uuid+".zip");
        ServletOutputStream outputStream = response.getOutputStream();
        FileInputStream fis = new FileInputStream(zip);
        byte[] bytes = new byte[1024];
        while((len = fis.read(bytes)) != -1){
            outputStream.write(bytes,0,len);
        }
        fis.close();
        outputStream.close();
        // 删除暂存目录
        FileUtil.del(file);
    }

上述从远程下载文件,并重命名的方法

HttpUtil.downloadFileFromUrl(item.getUrl(),fileDri) ;
fileOut.renameTo();

可以替换为下面的方法:

  // 获取远程服务文件流
    public void URLDownLoad(Strin linkUrl,String fileDir) throws IOException{
        if(ObjectUtil.isEmpty(linkUrl)){
            return;
        }
        URL url = new URL(linkUrl);
        URLConnection conn = url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(3 * 1000);
        //防止屏蔽程序抓取而返回403错误 模仿浏览器行为
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到输入流
        InputStream inputStream = conn.getInputStream();
        //得到远程文件
        String[] split = urlFile.split("\\.");
        //文件重命名
        String filePath = fileDir+"/"+IdWorker.get32UUID()+"."+split[split.length-1];
        File file = new File(filePath);
        file.createNewFile();
        FileOutputStream outputStream = new FileOutputStream(file);
        byte[] buffer = new byte[1024 * 5];
        int len;
        while((len = inputStram.read(buffer))!= -1){
            outputStream.write(buffer,0,len);
        }
        outputStream.close();
        inputStream.close();
    }
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇