鍍金池/ 問(wèn)答/Java/ springboot項(xiàng)目,后端存儲(chǔ)圖片到項(xiàng)目的某目錄下,路徑怎么寫(xiě)?

springboot項(xiàng)目,后端存儲(chǔ)圖片到項(xiàng)目的某目錄下,路徑怎么寫(xiě)?

1.springboot項(xiàng)目結(jié)構(gòu)如圖所示

clipboard.png

2.UploadController負(fù)責(zé)后端接收?qǐng)D片文件并保存到項(xiàng)目的images路徑下,那這個(gè)相對(duì)地址應(yīng)該怎么寫(xiě)?
寫(xiě)過(guò)"templates/images/",和“./main/resources/templates/images/”形式,都不能存儲(chǔ),前端控制臺(tái)給出的url都是以下這樣:

clipboard.png

回答
編輯回答
孤星
UploadController負(fù)責(zé)后端接收?qǐng)D片文件并保存到項(xiàng)目的images路徑下

關(guān)鍵是僅僅存儲(chǔ)就可以了是吧?存儲(chǔ)完后要干啥么(比如做為資源給用戶訪問(wèn)?)?如果僅僅是存儲(chǔ),找個(gè)服務(wù)器的目錄存儲(chǔ)就行了吧

2017年11月23日 20:45
編輯回答
互擼娃

你這個(gè)前端的url都是臨時(shí)的緩存url,并不是實(shí)際上傳的服務(wù)器的url。
你的功能就是就是要實(shí)現(xiàn)上傳圖片吧。那直接在Controller端獲取圖片流然后寫(xiě)到對(duì)應(yīng)目錄里即可。

    @PostMapping("upload")
    public String upload(@RequestParam(required = false) MultipartFile image,
            HttpServletRequest request) {
        String basePath = request.getServletContext().getRealPath("templates/images/");
        System.out.println(basePath);
        File directory = new File(basePath);
        if (!directory.exists()) {
            directory.mkdirs();
        }
        try {
            image.transferTo(new File(basePath + image.getName()));
        } catch (Exception e) {
            // TODO
        }
        return "success";
    }
2018年3月8日 23:14
編輯回答
念初
@ResponseBody
    @RequestMapping(path = "/save_photo", method={RequestMethod.POST})
    public void addDish(@RequestParam("photos") MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws Exception
    {
        String path = null;// 文件路徑
        String json = "";
        if (file!=null) {// 判斷上傳的文件是否為空

            String type = null;// 文件類型
            String fileName = file.getOriginalFilename();// 文件原名稱
            System.out.println("上傳的文件原名稱:"+fileName);
            // 判斷文件類型
            type = fileName.indexOf(".")!=-1?fileName.substring(fileName.lastIndexOf(".")+1, fileName.length()):null;
            if (type!=null) {// 判斷文件類型是否為空
                if ("GIF".equals(type.toUpperCase())||"PNG".equals(type.toUpperCase())||"JPG".equals(type.toUpperCase())) {
                    // 項(xiàng)目在容器中實(shí)際發(fā)布運(yùn)行的根路徑
                    String realPath = request.getSession().getServletContext().getRealPath("/");
                    // 自定義的文件名稱
                    String trueFileName = String.valueOf(System.currentTimeMillis()) + "." + type;
                    // 設(shè)置存放圖片文件的路徑
                    path = realPath+/*System.getProperty("file.separator")+*/trueFileName;
                    System.out.println("存放圖片文件的路徑:"+path);
                    // 轉(zhuǎn)存文件到指定的路徑
                    file.transferTo(new File(path));
                    System.out.println("文件成功上傳到指定目錄下");                  
                    }
                    json = "{\"res\":1}";
                }else {
                    System.out.println("不是我們想要的文件類型,請(qǐng)按要求重新上傳");
                    //return null;
                    json = "{\"res\":0}";
                }
            }else {
                System.out.println("文件類型為空");
                //return null;
                json = "{\"res\":0}";
            }
        }else {
            System.out.println("沒(méi)有找到相對(duì)應(yīng)的文件");
            json = "{\"res\":0}";
            //return null;
        }
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().print(json);
    }

上傳存儲(chǔ)圖片就是這樣寫(xiě)啊,那個(gè)圖片的地址沒(méi)錯(cuò),就是域名/xx.jpg這樣的格式。spring就是這樣。

參考文章

2017年12月11日 00:21