springboot文件上傳展示遇到 Not allowed to load local resource:問題

問題展示

在這裏插入圖片描述

參考文章

百度易得,是tomcat的問題,可以通過更改tomcat配置文件的方式解決,但是springboot項目他的tomcat是內嵌的,所以要用另一種方式解決
我查到的解決方式
博客地址鏈接
另一篇博客的解決
兩個大同小異,綜合理解理解終於解決了問題
但我覺得他們說的意思還是不清晰,還要修改信息的展示,我看着他的還是小半個小時

問題解決

1.寫一個配置類
在這裏插入圖片描述
配置虛擬地址映射,這麼理解這個方法
以截圖中爲例,我請求/Path/,就相當於是訪問後面那個紅框的地址

但是文件上傳時好像不能這樣請求
在這裏插入圖片描述
這樣會直接上傳失敗
但是如果直接將絕對路徑上傳到數據庫,訪問就會出現Not allowed to load local resource:問題
我們想要請求圖片展示時請求的是虛擬路徑,那麼我們可以這樣

@Controller
public class FileController {

    @GetMapping("/upload")
    public String upload() {
        return "upload";
    }

    @PostMapping("/upload")
    @ResponseBody
    public Map<String,Object> upload(@RequestParam("file") MultipartFile file, HttpServletRequest request, Model model) {
        Map<String,Object> map = new HashMap<>();
        map.put("code",0);
        if (file.isEmpty()) {
            map.put("msg","上傳失敗");
            return map;
        }

        String fileName = UUID.randomUUID().toString().substring(0,5)+file.getOriginalFilename() ;
        User user = (User) request.getSession().getAttribute("user");
        //這個不能寫到項目路徑下,tomcat會訪問不到
        //上傳還必須是絕對路徑,不然他會上傳失敗
            //那我能不能這裏寫個句對路徑,但我實際往數據庫中寫的只有文件名,然後配置虛擬目錄
        // String filePath = "\\path\\"+user.getUsername()+"\\";
        String filePath = "D:\\"+user.getUsername()+"\\";
		//這裏圖片上傳是用的絕對路徑
        System.out.println(filePath);
        File dest = new File(filePath + fileName);
        if (!dest.exists()){
            dest.mkdirs();
        }

        Map<String,Object> data = new HashMap<>();
        data.put("src",filePath+fileName);
        try {
            file.transferTo(dest);
            map.put("msg","上傳成功");
            //之前傳絕對路徑的情況:
            //map.put("url",filePath+fileName);
            
            //這句話配合前端代碼pushNeed來看
            //這個map會作爲json返回
            //在前端可以獲取到他的url,然後放到表單裏,屬性設置成隱藏,傳到數據庫
            //在這裏可以只傳他的文件名,不傳路徑,然後請求的時候加路徑就可以加配置得虛擬目錄了
            //map.put("url",fileName);
            
            System.out.println("上傳成功");
            return map;
        } catch (IOException e) {
            map.put("msg","上傳失敗");
            System.out.println("上傳失敗");
        }
        return map;
    }
}

在這裏插入圖片描述
在這裏插入圖片描述
這樣表單上傳的時候就吧文件名也一起上傳
傳到數據庫裏是紅框裏的樣子,只有文件名
可以看到另一條記錄就是我爲了恢復錯誤寫的一條記錄,是絕對路徑
在這裏插入圖片描述
存的是相對路徑
請求展示的時候

在這裏插入圖片描述
他的/Path/就會映射成D:/fzj/然後相當於是訪問這個絕對路徑下的內容
在這裏插入圖片描述
沒加載出來的是之前傳絕對路徑的記錄,現在又在前面加了虛擬路徑,應該是會報404的。

注意點

thymeleaf拼接路徑
不要直接
在這裏插入圖片描述
會報錯
他是這麼拼接路徑的
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章