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小項目達到融匯貫通