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