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小项目达到融汇贯通