mirror of https://github.com/usbharu/Hideout.git
feat: 画像読み込みに対応
This commit is contained in:
parent
be07a89b7f
commit
2bc9b17cdc
|
@ -82,6 +82,7 @@ class SecurityConfig {
|
||||||
authorize(GET, "/auth/sign_up", hasRole("ANONYMOUS"))
|
authorize(GET, "/auth/sign_up", hasRole("ANONYMOUS"))
|
||||||
authorize(POST, "/auth/sign_up", permitAll)
|
authorize(POST, "/auth/sign_up", permitAll)
|
||||||
authorize(GET, "/users/{username}/posts/{postId}", permitAll)
|
authorize(GET, "/users/{username}/posts/{postId}", permitAll)
|
||||||
|
authorize(GET, "/files/*", permitAll)
|
||||||
|
|
||||||
authorize(anyRequest, authenticated)
|
authorize(anyRequest, authenticated)
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,21 +16,44 @@
|
||||||
|
|
||||||
package dev.usbharu.hideout.core.interfaces.api.media
|
package dev.usbharu.hideout.core.interfaces.api.media
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.config.LocalStorageConfig
|
||||||
|
import dev.usbharu.hideout.core.external.media.FileTypeDeterminer
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
|
||||||
import org.springframework.core.io.ClassPathResource
|
import org.springframework.core.io.ClassPathResource
|
||||||
|
import org.springframework.core.io.PathResource
|
||||||
import org.springframework.core.io.Resource
|
import org.springframework.core.io.Resource
|
||||||
import org.springframework.http.MediaType
|
import org.springframework.http.MediaType
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.stereotype.Controller
|
import org.springframework.stereotype.Controller
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
import org.springframework.web.bind.annotation.PathVariable
|
import org.springframework.web.bind.annotation.PathVariable
|
||||||
|
import java.nio.file.Path
|
||||||
|
import kotlin.io.path.name
|
||||||
|
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@ConditionalOnProperty("hideout.storage.type", havingValue = "local", matchIfMissing = true)
|
@ConditionalOnProperty("hideout.storage.type", havingValue = "local", matchIfMissing = true)
|
||||||
interface LocalFileController {
|
class LocalFileController(
|
||||||
|
localStorageConfig: LocalStorageConfig,
|
||||||
|
private val fileTypeDeterminationService: FileTypeDeterminer
|
||||||
|
) {
|
||||||
|
|
||||||
|
private val savePath = Path.of(localStorageConfig.path).toAbsolutePath()
|
||||||
|
|
||||||
@GetMapping("/files/{id}")
|
@GetMapping("/files/{id}")
|
||||||
fun files(@PathVariable("id") id: String): ResponseEntity<Resource>
|
fun files(@PathVariable("id") id: String): ResponseEntity<Resource> {
|
||||||
|
val name = Path.of(id).name
|
||||||
|
val path = savePath.resolve(name)
|
||||||
|
|
||||||
|
val mimeType = fileTypeDeterminationService.fileType(path, name)
|
||||||
|
val pathResource = PathResource(path)
|
||||||
|
|
||||||
|
return ResponseEntity
|
||||||
|
.ok()
|
||||||
|
.contentType(MediaType(mimeType.type, mimeType.subtype))
|
||||||
|
.contentLength(pathResource.contentLength())
|
||||||
|
.body(pathResource)
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/users/{user}/icon.jpg", "/users/{user}/header.jpg")
|
@GetMapping("/users/{user}/icon.jpg", "/users/{user}/header.jpg")
|
||||||
fun icons(): ResponseEntity<Resource> {
|
fun icons(): ResponseEntity<Resource> {
|
||||||
|
@ -41,4 +64,4 @@ interface LocalFileController {
|
||||||
.contentLength(pathResource.contentLength())
|
.contentLength(pathResource.contentLength())
|
||||||
.body(pathResource)
|
.body(pathResource)
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue