• Java 文件本地上传、下载和预览的实现


      以下方法为通用版本 实测图片和pdf 都没有问题 上传方法需要前端配合post请求 ,下载前端用a标签就可以,预览 前端使用ifrme标签   ,就可以实现基本功能。。。

    1、文件本地上传

    public String uploadFile(@RequestParam("file") Part file, @RequestParam(value = "dirPath", required = false) String dirPath) throws IOException {
            String fileName = file.getSubmittedFileName();//项目路径
            String dir = ConversionFactoryUtil.modulePath(dirPath == null ? "File" : dirPath);
            File dateDir = new File(dir);
            if (!dateDir.exists()) {
                dateDir.mkdirs();
            }
            String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);
            String fName = UUID.randomUUID().toString().replace("-", "");
            String filePath = File.separator + dir + File.separator + fName + "." + prefix;
            InputStream inputStream = file.getInputStream();
            Files.copy(inputStream, Paths.get(ConversionFactoryUtil.rootPath() + filePath));
            Map<String, String> result = new HashMap<>();
            result.put("fileName", fileName);
            result.put("filePath", filePath);
            return gson.toJson(result);
        }

    2、文件本地下载

    public String downLoadFile(String filePath, HttpServletResponse res, HttpServletRequest request) {
            String fileName = filePath.substring(filePath.lastIndexOf("\") + 1);
            try {
            res.setContentType("application/doc");
            final String userAgent = request.getHeader("USER-AGENT");
            if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器
                fileName = URLEncoder.encode(fileName,"UTF-8");
            }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
                fileName = new String(fileName.getBytes(), "ISO8859-1");
            }else{
                fileName = URLEncoder.encode(fileName,"UTF-8");//其他浏览器
            }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            // 通知浏览器以附件形式下载
            res.addHeader("Content-Disposition", "attachment;filename=" +fileName);//这里设置一下让浏览器弹出下载提示框,而不是直接在浏览器中打开
    
            byte[] buff = new byte[1024];
            BufferedInputStream bis = null;
            OutputStream os;
            try {
                os = res.getOutputStream();
                File file = new File(ConversionFactoryUtil.rootPath() + File.separator + filePath);
                if (file.exists()) {
                    bis = new BufferedInputStream(new FileInputStream(file));
                    int i = bis.read(buff);
                    while (i != -1) {
                        os.write(buff, 0, i);
                        os.flush();
                        i = bis.read(buff);
                    }
                    return "success";
                } else {
                    System.out.println("file not exists ...filePath:" + filePath);
                    return "file not local exists ...";
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (bis != null) {
                    try {
                        bis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }

    3、文件本地预览

    public String previewFile(String filePath, HttpServletResponse res, HttpServletRequest request) {
            String fileName = filePath.substring(filePath.lastIndexOf("\") + 1);
            try {
                res.setContentType("application/doc");
                final String userAgent = request.getHeader("USER-AGENT");
                if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器
                    fileName = URLEncoder.encode(fileName,"UTF-8");
                }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
                    fileName = new String(fileName.getBytes(), "ISO8859-1");
                }else{
                    fileName = URLEncoder.encode(fileName,"UTF-8");//其他浏览器
                }
                res.reset();// 非常重要
                res.setHeader("Content-Disposition", "inline; filename=" + fileName);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
    
            byte[] buff = new byte[1024];
            BufferedInputStream bis = null;
            OutputStream os = null;
            File file = null;
            try {
                os = res.getOutputStream();
                 file = new File(ConversionFactoryUtil.rootPath()  + filePath);
                if (file.exists()) {
                    bis = new BufferedInputStream(new FileInputStream(file));
                    int i = bis.read(buff);
                    while (i != -1) {
                        os.write(buff, 0, i);
                        os.flush();
                        i = bis.read(buff);
                    }
                    return "success";
                } else {
                    return "file not local exists ...";
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (bis != null) {
                    try {
                        os.close();
                        bis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
  • 相关阅读:
    浅析data:image/png;base64的应用
    利用Audacity软件分析ctf音频隐写
    利用Audacity软件分析ctf音频隐写
    php笔记(一)php介绍及数据类型
    php笔记(一)php介绍及数据类型
    ctf学习(web题二)
    ctf学习(web题二)
    win10显示许可证即将过期,但在激活界面显示的仍是已激活问题解决
    实验吧web题:
    js各种练习
  • 原文地址:https://www.cnblogs.com/memoryXudy/p/8709533.html
Copyright © 2020-2023  润新知