如何解决Spring cloud feign 不上传视频文件
我有 2 个微服务。第一个服务(视频转换器)和第二个服务(将 Spring 与 Amazon S3 集成以在 Amazon S3 上存储视频和图像)。
第一个服务按计划生成文件,在将 File
转换为 MultipartFile
后将其上传到第二个服务,然后再上传到 Amazon S3。
但我对 Feigh 上传视频的问题提出了质疑。
我调试的时候看到第二个服务中@RequestPart
中的文件是null
。但转换成功。
我尝试在帖子 File upload spring cloud feign client 中添加编码,但这无济于事。
代码示例第一个微服务: 上传方法:
@Override
public Response<String> uploadFile(final Object object,final MultipartFile multipartFile) {
final Map<String,Object> s3Url = videoServiceFeign.uploadFile(multipartFile,object.getId().toString(),object.getIdIds().toString(),object.getName());
object.setS3Url(s3Url.get("object").toString());
return generateSuccessResponse();
}
@Override
public Response<String> uploadFile(final Stream stream,final File file) throws IOException {
final InputStream inputStream = Files.newInputStream(file.toPath());
final MultipartFile multipartFile = new MockMultipartFile(file.getName(),file.getName(),ContentType.MULTIPART_FORM_DATA.toString(),IOUtils.toByteArray(inputStream));
return this.uploadFile(stream,multipartFile);
}
假客户端:
@FeignClient(name = "video-service",url = "${video-service.ribbon.listOfServers}")
public interface VideoServiceFeign {
@PostMapping(path = "/api/v1/video/upload",consumes = {"multipart/form-data"})
Map<String,Object> uploadFile(@RequestPart("file") MultipartFile multipartFile,@RequestParam("id") String id,@RequestParam("ids") String ids,@RequestParam("name") String name);
}
在第二个服务中上传端点:
@ApiOperation("Upload new video file")
@ApiResponses({
@ApiResponse(code = 200,message = "File uploaded successfully"),@ApiResponse(code = 403,message = "Access Denied"),@ApiResponse(code = 500,message = "Internal server error"),@ApiResponse(code = 503,message = "Gateway timeout")
})
@ResponseStatus(HttpStatus.OK)
@PostMapping(value = "/upload",consumes = {MediaType.APPLICATION_JSON_VALUE,MediaType.MULTIPART_FORM_DATA_VALUE})
public @ResponseBody
Map<String,Object> uploadFile(@RequestPart("file") final MultipartFile file,@RequestParam("id") final String id,@RequestParam("ids") final String ids,@RequestParam("name") final String name
) throws IOException {
return uploadService.uploadFile(id,ids,name,file);
}
我错过了什么?
解决方法
经过几天的研究,我发现了我想念的东西,问题出在该方法上:public Response<String> uploadFile(final Stream stream,final File file) throws IOException
在行中:
final MultipartFile multipartFile = new MockMultipartFile(file.getName(),file.getName(),ContentType.MULTIPART_FORM_DATA.toString(),IOUtils.toByteArray(inputStream));
我有两个问题首先是内容类型,我使用 video/mp4
而不是 ContentType.MULTIPART_FORM_DATA
。
第二个是 MockMultipartFile
的构造函数中的第一个参数,我使用 file.getName()
,但这是不正确的,因为文档说这是多部分请求中的字段名称。那应该是“文件”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。