Kotlin實現圖片上傳保存查看
- 2019 年 10 月 4 日
- 筆記

SpringBoot默認的訪問目錄默認是resource下,我們要想訪問服務包之外的文件需要自定義,下面我們以文件上傳訪問作為載體……
1 定義文件訪問url
Java程式碼動態實現Handler映射註冊
@Component class ResourceConfig : WebMvcConfigurerAdapter() { @Value("${twins.staticAccessPath}") lateinit var staticAccessPath: String @Value("${twins.uploadFolder}") lateinit var uploadFolder: String override fun addResourceHandlers(registry: ResourceHandlerRegistry) { super.addResourceHandlers(registry) registry.addResourceHandler(staticAccessPath) .addResourceLocations("file:" + uploadFolder) } }
yml配置動態屬性
twins: #靜態資源對外暴露的訪問路徑 staticAccessPath: /upload/** #靜態文件存儲路徑(最後帶/ 訪問路徑 upload/xxx/xxx) #最後路徑不帶/ 需要把最後文件夾添加 訪問路徑 upload/doc/xxx/xx uploadFolder: /Users/sk/doc/
上面Java程式碼和配置文件結合實現了 url與Handler註冊,以及存儲文件訪問路徑
2實現文件上傳
@Value("${twins.uploadFolder}") lateinit var docLocation: String @PostMapping("/upload") @ResponseBody public fun uploadImage(@RequestParam("file") file: MultipartFile, request: HttpServletRequest): Response<Image> { if (file.isEmpty) { return Response(ResponseCode.Custom, null, "圖片文件不能為空") } var fileName = file.originalFilename var suffixName = fileName.substring(fileName.lastIndexOf(".")) var filePath = docLocation fileName = UUID.randomUUID().toString() + suffixName var fileUrl = "/" + request.session.id + "/" + fileName filePath = filePath + fileUrl var dest = File(filePath) if (!dest.parentFile.exists()) { dest.parentFile.mkdirs() } file.transferTo(dest) return Response(ResponseCode.Success, Image(fileUrl), "success") }
我們看看響應
data class Response<T>(val code: ResponseCode = ResponseCode.Success, val data: T?, val msg: String?) { } enum class ResponseCode{ Success, Failure, Custom }
我們採用枚舉,這個在Java中與很大打區別,枚舉直接可以與INt映射轉化
3 訪問查看
文件訪問的公式:ip:port/url+文件相對路徑
以我們的配置為例
文件的絕對路徑:/Users/sk/doc/
映射Handler的url為:/upload/**
那麼組合起來就是
ip:port/upload/xxx.png
此處值的注意的是對於文件訪問的路徑設置
/Users/sk/doc/
/Users/sk/doc
而這看似相同是則區別很大:對於/Users/sk/doc來說最後的doc需要出現在文件的url訪問路徑中—-ip:port/upload/doc/xxxx.png
總結:
總的來說差異不是很大需要去熟悉語法的不適應,當然了Kotlin中的協成高級函數我們還沒有體驗到,後續根據Kotlin的學習之後我們進行語法實踐之後完善我們的Kotlin小項目達到融匯貫通