踩坑记录——idea中配置springmvc上传文件路径和访问路径问题

    技术2022-07-31  68

    先粘贴一段文件上传控制器代码

    @RequestMapping("fileupload") public String uploadFile(MultipartFile file, HttpServletRequest req) throws IOException { // 判断文件是否为空,空则返回失败页面 if (file.isEmpty()) { return "failed"; } // 获取文件存储路径(绝对路径) String path = req.getServletContext().getRealPath("/upload"); //判断目录是否存在,若不存在,则创建 File dir = new File(path); if (!dir.exists()){ dir.mkdirs(); } // 获取原文件名 String fileName = file.getOriginalFilename(); String uuid = UUID.randomUUID().toString().replaceAll("-","").toUpperCase(); fileName = uuid+"_"+fileName; // 创建文件实例 File filePath = new File(path, fileName); // 写入文件 file.transferTo(filePath); return "success"; }

    获取上传的文件夹采用了req.getServletContext().getRealPath("/upload");

    通过各种实验,该语句只能获取到服务器中项目根目录,加上后边的 "/upload" ,即便是我配置了External Source,指向该路径,但是该语句仍然只是获取服务器中项目根目录下的upload文件路径,并不是我后来配置的External Source文件的真实路径。

    1. 尝试用虚拟地址+upload访问req.getServletContext().getRealPath("/upload");获取到的目录下的文件,访问失败。

    2. 尝试用主机地址localhost:8080/upload访问,失败。

    3. 在编译后的目录中选择upload配置External Source,访问成功。

    3. 上传文件到req.getServletContext().getRealPath("/upload")目录,成功。

    总结:

    1. 编译后的项目根目录下的文件夹名/文件,不能成功访问,需要将该目录配置为External Source;

    2. req.getServletContext().getRealPath("/upload"); 该语句只是获取编译后的项目根目录下的upload文件夹路径;

    3.External Source配置文件访问目录和上传目录不相关.

    Processed: 0.008, SQL: 9