我正在尝试使用feign完成多部分文件上传,但我似乎无法在任何地方找到它的好例子。我基本上希望HTTP请求与此类似:
...
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="name"
Larry
--AaB03x
Content-Disposition: form-data; name="file"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--
甚至......
------fGsKo01aQ1qXn2C
Content-Disposition: form-data; name="file"; filename="file.doc"
Content-Type: application/octet-stream
... binary data ...
------fGsKo01aQ1qXn2C--
我是否需要手动构建请求主体,包括生成多部分边界?考虑到客户可以做的其他事情,这似乎有点过分了。
答案 0 :(得分:3)
public interface FileUploadResource {
@RequestLine("POST /upload")
@Headers("Content-Type: multipart/form-data")
Response uploadFile(@Param("name") String name, @Param("file") File file);
}
完成的示例可在此处找到:File Uploading with Open Feign
答案 1 :(得分:1)
如果您已经在使用Spring Web,则可以尝试使用能够创建Multipart请求的Feign Encoder。它可以发送单个文件,一个文件数组以及一个或多个其他JSON有效负载。 这是我的test project。如果您不使用Spring,可以通过更改FeignSpringFormEncoder中的encodeRequest方法来重构代码。
答案 2 :(得分:1)
MBozic 解决方案不完整,您还需要为此启用编码器:
using ActualDataFormat =
typename std::conditional<std::is_same<tType, bool>::value,
DataFormatBool,
typename std::conditional<
std::is_same<tType, float>::value,
DataFormatFloat,
DataFormatDouble>::type
>::type;
public class FeignConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public Encoder feignFormEncoder () {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
答案 3 :(得分:0)
对于spring boot 2和 spring-cloud-starter-openfeign ,请使用以下代码:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
...
});
module.exports = router;
您需要在伪客户端调用中将@RequestParam更改为@RequestPart,以使其正常运行,并将消耗添加到@PostMapping中。