前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin实现图片上传保存查看

Kotlin实现图片上传保存查看

作者头像
大话swift
发布2019-09-17 15:58:34
1.7K0
发布2019-09-17 15:58:34
举报
文章被收录于专栏:大话swift大话swift

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档