欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot项目的文件上传;项目路径下或工作空间外的地方

程序员文章站 2022-04-08 16:32:20
...

功能描述:
springboot项目,上传文件;
上传路径:resources文件下和项目外的地方如D盘等。

要解决的问题:
1.上传路径的设置。
2.上传到别的地方后,前端展示访问的配置。
3.上传文件,附带其他相关信息。

直接贴代码:

 /**
     * 上传新闻缩略图 -- 上传到本地硬盘
     * @param file
     * @return
     */
    @CrossOrigin
    @ApiOperation(httpMethod = "POST", value = "上传新闻缩略图", notes = "上传新闻缩略图", produces = "application/json;charset=UTF-8")
    @ApiImplicitParam(name = "file", value = "文件名", required = true, paramType = "query")
    @PostMapping("/uploadSLT")
    public Object uploadSLT(HttpServletRequest request, @RequestParam("file") MultipartFile file) {
        Map map = new HashMap();
        if (file.isEmpty()) {
            map.put("error", "上传失败,请选择文件");
        }
        //获取文件名
        String fileName = file.getOriginalFilename();
        String prefix = fileName.substring(fileName.lastIndexOf("."));//文件后缀
        //新文件名
        String s = IdUtil.simpleUUID();//避免重复以UUID为文件名
        String filenas = s + prefix;
   		 //定义文件存放位置;
   		 //上传和下载的路径  linux 生产
   		 //String filePath  = "/data/file/";
        String filePath = "D:/image/slt/";
        File dest = new File(filePath + filenas);
        try {
            file.transferTo(dest);
            LOGGER.info("上传成功");
            //拼接地址,返回
            String url = filePath + filenas;
            return MapMess.success(url);
        } catch (IOException e) {
            LOGGER.error(e.toString(), e);
            return MapMess.error(HttpRes.EXCEPTION.val(),HttpRes.EXCEPTION.msg());
        }
    }

上面的方法为上传到项目之外的方法;

下面为上传到项目文件夹下:

 	public final static String IMG_PATH_PREFIX = "static/sltimage";
    public static File getImgDirFile(String imgPath){
        // 构建上传文件的存放 "文件夹" 路径s
        String fileDirPath = new String("src/main/resources/" + imgPath);
        File fileDir = new File(fileDirPath);
        if(!fileDir.exists()){
            // 递归生成文件夹
            fileDir.mkdirs();
        }
        return fileDir;
    }


    /**
     * 上传新闻缩略图
     * @param file
     * @return
     */
    @CrossOrigin
    @ApiOperation(httpMethod = "POST", value = "上传新闻缩略图", notes = "上传新闻缩略图", produces = "application/json;charset=UTF-8")
    @ApiImplicitParam(name = "file", value = "文件名", required = true, paramType = "query")
    @PostMapping("/uploadSLT")
    public Object uploadSLT(HttpServletRequest request, @RequestParam("file") MultipartFile file) {
        Map map = new HashMap();
        if (file.isEmpty()) {
            map.put("error", "上传失败,请选择文件");
        }
        //获取文件名
        String fileName = file.getOriginalFilename();
        String prefix = fileName.substring(fileName.lastIndexOf("."));//文件后缀
        //新文件名
        String s = IdUtil.simpleUUID();//避免重复以UUID为文件名
        String filenas = s + prefix;
        // 存放上传图片的文件夹
       File fileDir = getImgDirFile(IMG_PATH_PREFIX);
        // 输出文件夹绝对路径  -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径
         String absolutePath = fileDir.getAbsolutePath();
        File dest = new File(absolutePath +File.separator+ filenas);
        try {
            file.transferTo(dest);
            LOGGER.info("上传成功");
            //拼接地址
            String url = filePath + filenas;
            return MapMess.success(url);
        } catch (IOException e) {
            LOGGER.error(e.toString(), e);
            return MapMess.error(HttpRes.EXCEPTION.val(),HttpRes.EXCEPTION.msg());
        }
    }

通过项目访问存储在别的地方的图片;

@Configuration
public class MyConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        File fileDir = new File("classpath:src/main/resources/static/sltimage/");
        //和页面有关的静态目录都放在项目的static目录下
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/META-INF/resources/static/");
        //上传的图片在D盘下的image目录下,访问路径如:http://localhost:8080/image/slt/d3cf0281-bb7f-40e0-ab77-406db95ccf2c.jpg
        //其中image/slt表示访问的前缀。"file:D:/image/slt/"是文件真实的存储路径
        registry.addResourceHandler("/image/slt/**").addResourceLocations("file:D:/image/slt/");
       
    }
}

参考资料:

https://www.jianshu.com/p/54e0ca450f88
https://blog.csdn.net/ajklaclk/article/details/80804137