Branched Evolution

Competitive Programming in Python

Kotlinで画像のアップロード

multipart/form-data形式で画像データをPostすると,その画像にアクセスできるURLが返ってくるようにする.

https://user-images.githubusercontent.com/49140016/90927305-cd77d580-e42f-11ea-986b-ee26c5a2d95f.png

github.com

実装

package com.example.demo

import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.multipart.MultipartFile
import org.springframework.http.ResponseEntity

import java.io.FileOutputStream
import java.util.UUID
import javax.servlet.http.HttpServletRequest

@RestController
class ImageController {

    @PostMapping("/upload")
    fun upload(file: MultipartFile, request: HttpServletRequest): ResponseEntity<String> {
        val dir = "src/main/resources/static"
        val name = UUID.randomUUID().toString()
        val ext = when (file.contentType) {
            "image/png" -> "png"
            "image/jpeg" -> "jpg"
            else -> return ResponseEntity.badRequest().body(
                "content type '${file.contentType}' is invalid."
            )
        }
        FileOutputStream("${dir}/${name}.${ext}").write(file.bytes)
        val url = request.requestURL.toString().replace("/upload", "")
        return ResponseEntity.ok("${url}/${name}.${ext}")
    }

}