如何将存储在 Postgres 中的图像的图像 URL 插入 Spring Boot 模型

Posted

技术标签:

【中文标题】如何将存储在 Postgres 中的图像的图像 URL 插入 Spring Boot 模型【英文标题】:How to insert an Image URL for Images stored in Postgres into a Spring Boot Model 【发布时间】:2021-04-21 14:28:23 【问题描述】:

我用 Spring Boot Gradle Kotlin 后端构建了一个应用程序,它可以存储 Multipart 文件并将其上传到 Postgres 数据库。数据存储在 ByteArray 中。到目前为止一切正常。

现在我想添加一个图像 URL 以使其在我的 JSON 对象中可用,以便稍后抓取它并将其显示在我的客户端,就像 Unsplash 上的那样。

图片网址

"imageURL": "https://xyz.jpg"

文件模型

@Entity
@Table(name = "file")
data class File(
    @Id
    val id: UUID = UUID.randomUUID(),
    val createdAt: LocalDateTime = LocalDateTime.now(),
    var updatedAt: LocalDateTime = LocalDateTime.now(),
    var likes: Int = 0,
    var likedByUser: Boolean = false,
    var description: String = "",
    val downloadLink: URI = URI("https://unsplasy-backend.herokuapp.com/files/download/$id"),
    var name: String = "",
    var type: String = "",

    @Basic(fetch = FetchType.LAZY)
    private val data: ByteArray = byteArrayOf(),

    val imageURL: TODO = "TODO"
)

商店

    fun store(file: MultipartFile): File 
        val fileName = file.originalFilename.toString()
        val fileToSave = File(
            name = fileName,
            type = file.contentType.toString(),
            data = file.bytes
        )

        return fileRepository.save(fileToSave)
    

【问题讨论】:

这能回答你的问题吗? Retrieve image from blob via Hibernate (not JDBC) 是的,谢谢,我想通了。我不确定这是否是最好的方法,但它确实有效。 【参考方案1】:

在阅读了上面的建议后,我想出了这个并且它有效。 控制器更新

@GetMapping("/files/image/id")
    fun displayImage(@PathVariable id: UUID, response: HttpServletResponse) 
        val file = fileService.getFile(id)
        val data = fileService.getData(file)
        response.contentType = file.type
        response.outputStream.write(data)
        response.outputStream.close()
    

文件模型更新

val imageURL: URL = URL("https://unsplasy-backend.herokuapp.com/files/image/$id"),

【讨论】:

以上是关于如何将存储在 Postgres 中的图像的图像 URL 插入 Spring Boot 模型的主要内容,如果未能解决你的问题,请参考以下文章

从 Postgres 返回图像 url 到前端 - Node / React

如何使用节点 api 将图像存储在共享主机提供商上

如何将图像添加到存储在变量中的 QuickLook

如何将存储在数据库中的图像作为字符串显示到真实图像?

如何使用objective-c将图像存储在缓存中

如何将二进制缓冲区解码为 node.js 中的图像?