ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java加载远程服务器上的文件、文件名包含中文

2022-06-28 15:00:56  阅读:150  来源: 互联网

标签:java String 文件名 fileName pathBuilder out pathString append 加载


  由于在项目中,不想把文件的存储路径暴露到前端,所以采用了stream的方式将文件输入到前端。

  项目初始阶段,没有考虑到NAS存储保存图片到另外一台服务器上,所以采用了最近简单的写法。但是发布到正式环境以后,图片死活显示不出来,一直以为是被其他的安全软件拦击了。

  PS:易错点

  1、不要相信“File.separator”,

    在Windows下是"\",在linux下是“/”

    但是在拼接路径的时候,需要用的是“/”,而不是“\”

  2、远程服务器上的图片,不能通过路径直接 new FileInputStream,需要通过URL对象访问

  3、远程路径拼接时,如果存在中文,需要用 URLEncoder.encode(fileName, "utf-8") 包一下

 

private InputStream getFileByName(String testId, String testCenterId, String taskId, String neeaAppId, String fileName) throws Exception {
        StringBuilder pathBuilder = new StringBuilder();
        pathBuilder.append(projectProperties.getImgDirectory());
        pathBuilder.append("/");
        pathBuilder.append(testId);
        pathBuilder.append("/");
        pathBuilder.append(testCenterId);
        pathBuilder.append("/");
        pathBuilder.append(taskId);
        pathBuilder.append("/");
        pathBuilder.append(neeaAppId);
        pathBuilder.append("/");
        Pattern p = Pattern.compile(RegexConstant.HTTP_REGEX);
        Matcher m = p.matcher(projectProperties.getNosImgDirectory());
        if (m.find()) {
            pathBuilder.append(URLEncoder.encode(fileName, "utf-8"));
            String pathString = pathBuilder.toString();
            log.info("附件路径:" + pathString);
            //远程路径地址,需要采用url访问
            URL url = new URL(pathString);
            return url.openStream();
        } else {
            pathBuilder.append(fileName);
            String pathString = pathBuilder.toString();
            log.info("附件路径:" + pathString);
            return new FileInputStream(pathString);
        }
    }

 

 

 public void loadImg(
            @RequestParam("testId") String testId,
            @RequestParam("testCenterId") String testCenterId,
            @RequestParam("taskId") String taskId,
            @RequestParam("neeaAppId") String neeaAppId,
            @RequestParam("file") String fileName,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        OutputStream out = null;
        InputStream in = null;
        try {
            in = getFileByName(testId, testCenterId, taskId, neeaAppId, fileName);
            BufferedImage image = ImageIO.read(in);
            response.setContentType("image/jpeg");
            out = response.getOutputStream();
            if (image != null) {
                ImageIO.write(image, "jpeg", out);
            }
        } catch (IOException e) {
            log.error("获取图片异常{}", e.getMessage());
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.flush();
                out.close();
            }
        }
    }

 

标签:java,String,文件名,fileName,pathBuilder,out,pathString,append,加载
来源: https://www.cnblogs.com/hobby0524/p/16419457.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有