实现并解决微服务间OpenFeign转发文件格式MultipartFile

这篇具有很好参考价值的文章主要介绍了实现并解决微服务间OpenFeign转发文件格式MultipartFile。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景

使用openfeign转发MultipartFile类型的文件时出现了下面的错误。

@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ApiOperation(value = "导入")
public ResponseJson<String> uploadFiles(@RequestParam("files") MultipartFile[] files) {
    for (MultipartFile file : files) {
        if (!isExcelFile(file)) {
            return ResponseJson.fail("文件格式错误. 只支持.xls和.xlsx文件格式");
        }
    }
}
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

实现并解决微服务间OpenFeign转发文件格式MultipartFile,微服务,spring,微服务,架构,云原生,spring

分析原因后发现,请求中并没有正确设置请求头部中 Content-Typemultipart/form-data的类型。

multipart/form-data 是一种 HTTP 请求的内容类型(Content-Type),它被设计用来支持文件上传以及提交表单数据。

解决

对于文件格式,Spring提供了用于处理文件上传的注解@RequestParam,只需要将@RequestPart即可解决问题。

openFeign接口代码:

@FeignClient(name = "anti-fraud-web-ruleDesign",path = "/calculationTemplate")
public interface CalculationTemplateClient {
    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    ResponseJson<String> uploadFiles(@RequestPart("files") MultipartFile[] files);
}

被调用服务接口:

@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ApiOperation(value = "导入")
public ResponseJson<String> uploadFiles(@RequestPart("files") MultipartFile[] files) {
    for (MultipartFile file : files) {
        if (!isExcelFile(file)) {
            return ResponseJson.fail("文件格式错误. 只支持.xls和.xlsx文件格式");
        }
    }
}

@RequestParam和@RequestPart的区别

在 Spring Framework 中,@RequestParam@RequestPart 是处理客户端到服务器的请求数据时使用的两个不同的注解,它们在多部分文件上传和表单数据处理方面有着明显的区别。

  1. @RequestParam

    • 用途:主要用于处理来自查询参数(URL)或表单数据(application/x-www-form-urlencoded)的简单请求参数。
    • 数据类型:通常用于处理文本类型的数据,如 String、Integer 等。
    • 文件上传:虽然可以用于处理 multipart/form-data 类型的文件上传,但不是专门为此设计的。当用于文件时,通常需要将文件内容转换为字节数组或字符串。
  2. @RequestPart文章来源地址https://www.toymoban.com/news/detail-822024.html

    • 用途:专门用于处理 multipart/form-data 请求,即文件上传请求。
    • 数据类型:可以处理复杂对象,如 MultipartFile 或用户自定义的对象。它允许直接将请求的一部分映射到一个对象上,这在处理文件上传时非常有用。
    • 文件上传:是处理 multipart/form-data 中文件的理想选择,直接支持 MultipartFile 类型,可以很容易地访问上传的文件。

到了这里,关于实现并解决微服务间OpenFeign转发文件格式MultipartFile的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包