Kotlin实现图片上传保存查看

2019-09-17 15:58:34 浏览数 (1)

SpringBoot默认的访问目录默认是resource下,我们要想访问服务包之外的文件需要自定义,下面我们以文件上传访问作为载体……

1 定义文件访问url

Java代码动态实现Handler映射注册

代码语言:javascript复制
@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配置动态属性

代码语言:javascript复制
twins:
  #静态资源对外暴露的访问路径
  staticAccessPath: /upload/**
  #静态文件存储路径(最后带/ 访问路径 upload/xxx/xxx)
  #最后路径不带/  需要把最后文件夹添加 访问路径 upload/doc/xxx/xx
  uploadFolder:  /Users/sk/doc/

上面Java代码和配置文件结合实现了 url与Handler注册,以及存储文件访问路径

2实现文件上传

代码语言:javascript复制
  @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")
    }

我们看看响应

代码语言:javascript复制
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小项目达到融汇贯通

0 人点赞