zoukankan      html  css  js  c++  java
  • 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;
        }
  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/memoryXudy/p/8709533.html
Copyright © 2011-2022 走看看