2018年7月14日 星期六

靜態資源、上傳 (SpringBoot 2.x 三)

※靜態資源


官網說明中,可以在 classpath 和 ServletContext 下增加檔案或資料夾,裡面都算是靜態

1.專案下有個 .classpath 檔, kind="src" 的 path 就是 classpath 路徑,也可自己增加
classpath/static
classpath/public
classpath/resources
classpath/META-INF/resources

2.ServletContext
src/main/webapp
如果包的是jar檔,大多數的構建工具可能會默默的忽略

以上5個地方都可以

假設在 public 下放一個圖片檔 xxx.jpg
網址打上 http://localhost:9000/xxx.jpg 即可訪問靜態資源



※上傳


<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="fileName"><br /> 
    <input type="submit" />
</form>




@RestController
public class FileUpload {
    @RequestMapping("/upload")
    public Map<String, String> processFileUpload(@RequestParam("fileName") MultipartFile fName)
            throws IllegalStateException, IOException {
        final File path = new File("D:/" + fName.getOriginalFilename());
        fName.transferTo(path);
        Map<String, String> map = new HashMap<>();
        map.put("msg", "success");
        map.put("path", path.getPath());
        return map;
    }
}
    
    
@SpringBootApplication
public class Test {
    public static void main(String[] args) {
        SpringApplication.run(Test.class, args);
    }
}

※@RestController 就是 @ResponseBody 和 @Controller 的組合,點進去可以看到,也就是整個 class 都是回傳 JASON 的,如果整個 class 都要回傳 JASON,就不用每一個方法都設 @ResponseBody 了

※打上 http://localhost:9000/index.html 後可上傳

※@RequestParam 必需對應前端的 name 名稱,如果不寫,那 MultipartFile 的變數必需和前端的 name 一樣

※預設不能超過 1048576 b 的檔案,也就是 1MB
會出「The field fileName exceeds its maximum permitted size of 1048576 bytes.」的訊息

官網說在 classpath 下增加 application.properties 可設定一些有的沒的,搜尋 MULTIPART 可設定上傳相關的屬性,有需要在複製下來改,以下是預設值和說明

spring.servlet.multipart.enabled=true #是否啟用多檔上傳
spring.servlet.multipart.file-size-threshold=0 # 檔案超過多少時緩存,可參考這篇的說明
spring.servlet.multipart.location= #檔案上傳時的臨時資料夾,可參考這篇的說明
spring.servlet.multipart.max-file-size=1MB #一個檔案的最大值
spring.servlet.multipart.max-request-size=10MB #全部檔案的最大值
spring.servlet.multipart.resolve-lazily=false #是否啟用lazy

沒有留言:

張貼留言