You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Function Web返回图片失败求助(Spring Boot 3)

问题解决:Spring Cloud Function返回图片变为JSON的处理

问题根源

当前代码返回Message<ByteArray>时,Spring Cloud Function Web适配器默认会将字节数组序列化为JSON数组输出,而非直接以二进制流形式返回图片内容。

解决方案

修改函数返回类型,使用ResponseEntity<Resource>或Message<Resource>,让Spring Web正确识别并输出二进制图片流:

方案1:返回ResponseEntity(推荐)

// 可通过POST http://localhost:8080/kotlinByteConsumer 以form-data方式上传文件
@Bean
fun kotlinByteConsumer(): (MultipartFile) -> ResponseEntity<Resource> {
    return { file ->
        // 保存文件到磁盘
        val receivedFile = File(file.originalFilename ?: "uploaded-image")
        receivedFile.writeBytes(file.bytes)

        // 构建图片响应
        val imageResource = FileSystemResource(receivedFile)
        ResponseEntity.ok()
            .contentType(MediaType.valueOf(file.contentType ?: MediaType.IMAGE_JPEG_VALUE))
            .body(imageResource)
    }
}

方案2:返回Message

// 可通过POST http://localhost:8080/kotlinByteConsumer 以form-data方式上传文件
@Bean
fun kotlinByteConsumer(): (MultipartFile) -> Message<Resource> {
    return { file ->
        // 保存文件到磁盘
        val receivedFile = File(file.originalFilename ?: "uploaded-image")
        receivedFile.writeBytes(file.bytes)

        // 构建包含图片资源的消息
        val imageResource = FileSystemResource(receivedFile)
        MessageBuilder.withPayload(imageResource)
            .setHeader(HttpHeaders.CONTENT_TYPE, file.contentType ?: MediaType.IMAGE_JPEG_VALUE)
            .build()
    }
}

说明

  • 使用Resource类型(如FileSystemResource)时,Spring Web会自动处理二进制流输出,避免JSON序列化
  • 响应的Content-Type优先使用上传文件自带的类型,保证客户端能正确识别图片格式
  • 测试时确保Postman的Accept头设置为*/*或对应图片类型(如image/jpeg)

内容的提问来源于stack exchange,提问作者Oliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:35:14