feign批量上传文件

import feign.codec.Encoder;

import feign.form.FormEncoder;

import feign.form.spring.SpringFormEncoder;

import org.springframework.beans.factory.ObjectFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.autoconfigure.http.HttpMessageConverters;

import org.springframework.cloud.openfeign.support.SpringEncoder;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import org.springframework.context.annotation.Scope;

import feign.RequestTemplate;

import feign.codec.EncodeException;

import feign.form.ContentType;

import feign.form.MultipartFormContentProcessor;

import feign.form.spring.SpringManyMultipartFilesWriter;

import feign.form.spring.SpringSingleMultipartFileWriter;

import org.springframework.web.multipart.MultipartFile;

import java.lang.reflect.Type;

import java.util.*;

/**

* feign配置,支持传送文件流到server

* 支持批量文件上传

*/

@Configuration

public class FeignConfig {

@Autowired

private ObjectFactory<HttpMessageConverters> messageConverters;

@Bean

@Primary

@Scope("prototype")

public Encoder feignEncoder() {

return new SpringMultipartEncoder(new SpringEncoder(messageConverters));

}

private class SpringMultipartEncoder extends FormEncoder {

public SpringMultipartEncoder(Encoder delegate) {

super(delegate);

MultipartFormContentProcessor processor = (MultipartFormContentProcessor)this.getContentProcessor(ContentType.MULTIPART);

processor.addFirstWriter(new SpringSingleMultipartFileWriter());

processor.addFirstWriter(new SpringManyMultipartFilesWriter());

}

@Override

public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException {

if (bodyType.equals(MultipartFile[].class)) {

MultipartFile[] files = (MultipartFile[])((MultipartFile[])object);

HashMap data = new HashMap(files.length, 1.0F);

data.put(files[0].getName(), Arrays.asList(files));

super.encode(data, MAP_STRING_WILDCARD, template);

} else if (bodyType.equals(MultipartFile.class)) {

MultipartFile file = (MultipartFile)object;

Map<String, Object> data = Collections.singletonMap(file.getName(), object);

super.encode(data, MAP_STRING_WILDCARD, template);

} else if ((object instanceof Iterable) && ((Iterable) object).iterator().hasNext() && ((Iterable) object).iterator().next() instanceof MultipartFile) {

Iterable<?> iterable = (Iterable)object;

HashMap data = new HashMap();

Iterator var13 = iterable.iterator();

while(var13.hasNext()) {

Object item = var13.next();

MultipartFile file = (MultipartFile)item;

data.put(file.getName(), file);

}

super.encode(data, MAP_STRING_WILDCARD, template);

} else {

super.encode(object, bodyType, template);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值