spring 云端分片上传超时

jogvjijk  于 2023-04-04  发布在  Spring
关注(0)|答案(1)|浏览(134)

编辑:解决了我自己。负载平衡器问题。
我第一次使用Sping Boot 和Webflux实现图像上传。我的应用程序部署到Google Cloud Platform,并位于Cloudflare后面。我怀疑CF一般是一个问题,因为所有其他类型的HTTP请求都可以正常工作。我想知道multipart/form-data是否是正确的方法。因为Postman给了我这样一个curl请求:

curl --location 'protocol://some-location/properties/967275918/images' \
--form 'image=@"C:/Users/MyUser/Pictures/testimage.jpg"'

在我的本地机器上,它在Controller中使用此代码工作正常,但是当部署到GCP时,我遇到超时。
发布表单是正确的方法吗?或者我的假设是正确的,我需要首先将ByteArray从客户端传递到服务器?
避免混淆代码:这个Sping Boot 应用程序是一个后端编排服务。它应该接收Image并将其转发到“真实的的”后端。

@RequestMapping(
        method = RequestMethod.POST,
        value = "/properties/{property-id}/images",
        consumes = { "multipart/form-data" }
)
fun uploadPropertyImage(propertyId: String, image: Flux<Part>, exchange: ServerWebExchange) : Mono<ResponseEntity<Void>> {
    return image.next()
            .map { it.headers().contentType!! }
            .flatMap { mediaType ->
                val imagePartContents = image.flatMap(Part::content)

                DataBufferUtils
                    .join(imagePartContents)
                    .flatMap { dataBuffer ->
                        val imageAsByteArray = dataBuffer.imageAsByteArray()

                        propertyApiAdapter.uploadImage(propertyId, imageAsByteArray, mediaType)
                            .map { ResponseEntity.ok().build() }
                    }
            }
    }

注:这也是我第一次编写Spring Webflux。可能是我的代码在云中没有意义,但在我的本地机器上运行良好。

nnvyjq4y

nnvyjq4y1#

原来这不是一个编码问题,而是一个负载均衡器的配置问题。我忘了添加新的路由到反向代理。GCP Loadbalancer只是在找不到路由的后端时超时。

相关问题