首页 > 解决方案 > 文件从浏览器上传到泽西(服务器)客户端到泽西服务器

问题描述

背景

我有两个服务。服务 A向外界公开,服务 B服务 A调用。所有这些服务都是 dropwizard 服务。我试图实现的功能是从前端上传一个文件,该文件被上传到处理身份验证的服务 A。应将与原样相同的请求转移到服务 B服务 B应该在压缩和创建缩略图后获取文件并将其保存到磁盘。

我已经使用邮递员单独测试了这两个服务,它们能够接收作为 InputStream 的文件和内容处置。

问题

我面临的问题是当我想将 formData 中的文件从Service A传递到Service B时。

这是Service A中的代码,它将表单数据发送到Service B

@POST
@Timed
@Consumes(MediaType.MULTIPART_FORM_DATA)
fun create(
        @Auth user: AuthUser,
        @FormDataParam("file") file: InputStream,
        @FormDataParam("file") fileDetail: FormDataContentDisposition,
        @FormDataParam("file") body: FormDataBodyPart,
        @PathParam("res_id") articleId: String): Response {
    val multiPart = FormDataMultiPart()
    multiPart.bodyPart(body)
    val target = this.client.target("http://localhost:8082/file/create?res_id=1")
    val response = target.request().post(Entity.entity(multiPart, multiPart.mediaType), Response::class.java)
    Response.status(response.status).entity(response.entity).build()
}

这是接收它的服务 B中的代码。

@POST
@Path("/create")
@Consumes(MediaType.MULTIPART_FORM_DATA)
fun create(
        @FormDataParam("file") file: InputStream,
        @FormDataParam("file") fileDetail: FormDataContentDisposition,
        @QueryParam("res_id") resId: String): Response {
    resourceLogger.info("Res id in media create $resId")
    upload_file(file, fileDetail)
    return Response.status(201).entity(mapOf("success" to true)).build()
}

请求到达Service A并被发送到Service B。但服务 B以 400 响应。没有日志或堆栈跟踪。无法弄清楚出了什么问题。任何帮助,将不胜感激。

标签: kotlinmultipartform-datajersey-2.0dropwizardjersey-client

解决方案


推荐阅读