SpringCloud---Feign上传下载详解

1.使用原因

公司最近做的项目在用SpringCloud,设计到了上传。但是Feign本身是不支持文件类型的。所以这里把上传下载的实现分享一下。

2.所需配置

这是自己实现的一个formEncoder,可以支持单文件和数组的多文件上传

public class FeignSpringFormEncoder extends FormEncoder {

/**     * Constructor with the default Feign‘s encoder as a delegate.     */    public FeignSpringFormEncoder() {        this(new Default());    }

/**     * Constructor with specified delegate encoder.     *     * @param delegate delegate encoder, if this encoder couldn‘t encode object.     */    public FeignSpringFormEncoder(Encoder delegate) {        super(delegate);

MultipartFormContentProcessor processor = (MultipartFormContentProcessor) getContentProcessor(ContentType.MULTIPART);        processor.addWriter(new SpringSingleMultipartFileWriter());        processor.addWriter(new SpringManyMultipartFilesWriter());    }

@Override    public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException {        if (bodyType.equals(MultipartFile.class)) {            MultipartFile file = (MultipartFile) object;            Map data = Collections.singletonMap(file.getName(), object);            super.encode(data, MAP_STRING_WILDCARD, template);            return;        } else if (bodyType.equals(MultipartFile[].class)) {            MultipartFile[] file = (MultipartFile[]) object;            if(file != null) {                Map data = Collections.singletonMap(file.length == 0 ? "" : file[0].getName(), object);                super.encode(data, MAP_STRING_WILDCARD, template);                return;            }        }        super.encode(object, bodyType, template);    }}

将实现的类注册一下。
@Beanpublic Encoder feignEncoder(ObjectFactory<HttpMessageConverters> messageConverters) {    return new FeignSpringFormEncoder(new SpringEncoder(messageConverters));}

调用方的代码,这里参数接收的时候用的是@RequestPart,与@RequestParam区别大家可以去查一下。
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)@ResponseBodypublic ApiResult upload(@RequestPart(value = "file") MultipartFile file) {    return fileUploadApiClient.upload(file);}

暴露的fileUploadApiClient接口还需要添加依赖
<dependency>    <groupId>io.github.openfeign.form</groupId>    <artifactId>feign-form</artifactId>    <version>3.3.0</version></dependency><dependency>    <groupId>io.github.openfeign.form</groupId>    <artifactId>feign-form-spring</artifactId>    <version>3.3.0</version></dependency>

暴露的fileUploadApiClient代码,MediaType类型的指定

@PostMapping(value = "/oss/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)ApiResult upload(@RequestPart(value = "file") MultipartFile file);

最后直接调用就可以上传成功.

原文地址:https://www.cnblogs.com/technologykai/p/9335029.html

时间: 2024-08-29 11:11:30

SpringCloud---Feign上传下载详解的相关文章

七牛云存储Python SDK使用教程 - 上传策略详解

文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k 浏览 本教程旨在介绍如何使用七牛的Python SDK来快速地进行文件上传,下载,处理,管理等工作. 前言 我们在上面的两节中了解到,客户端上传文件时,需要从业务服务器申请一个上传凭证(Upload Token),而这个上传凭证是业务服务器根据上传策略(PutPolicy)来生成的,而这个生成过程中

PHP文件上传实例详解!!!

首先看官方文档 <?php// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead// of $_FILES. $uploaddir = '/var/www/uploads/';$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); echo '<pre>';if (move_uploaded_file($_FIL

Web应用安全之文件上传漏洞详解

什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这样的攻击.文件上传为什么会是漏洞呢?文件上传本身是没有问题的,问题是文件上传后看服务器怎么来处理,怎么来解析这个文件.如果说服务器处理的模式不够安全,那么就会导致严重的后果,也就是上传了恶意的可执行文件以后,服务器端对此文件进行执行. 文件上传后导致的安全问题 上传的文件是web脚本语言,服务器的w

Github上传本地代码详解

本教程结合Github服务端和客户端完成本地代码上传至Github,下面进行详细讲解: 1.创建Github账号,这一个步骤应该不用太多解释,直接上官网进行注册登录即可https://github.com/ 2.新建一个repository.如图,注册登录之后可以找到如下页面,新建一个repository. 新建之后会出现如下页面 这里我新建了一个名为Test的repository,其中可以添加描述信息.确定repository的访问权限,同时为了更易于coder理解你的代码,可以勾选生成REA

GitHub代码上传托管详解

GitHub是版本控制和协作的代码托管平台.第一步:生成秘钥:ssh-keygen -t rsa -b 2048 -C "[email protected]"第二步:查看秘钥:cat /root/.ssh/id_rsa.pub第三步:复制秘钥登录到https://github.com/settings/keys网站的ssh和GPG秘钥目录的相应位置.完后复制网站的克隆或下载的地址[url]第四步:git clone [email protected]:tianmaxingkun/hel

jquery组件WebUploader文件上传用法详解

这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件,下文来为各位演示一下关于jquery WebUploader文件上传组件的用法. 使用WebUploader还可以批量上传文件.支持缩略图等等众多参数选项可设置,以及多个事件方法可调用,你可以随心所欲的定制你要的上传组件. 接下来我以图片上

PHP上传文件详解

1.上传文件使用的提交方式和请求Content-type POST提交方式,原始的form表单提交请加上enctype="multipart/form-data" 2.MAX_FILE_SIZE 隐藏字段(单位为字节) 必须放在文件输入字段之前,其值为接收文件的最大尺寸.这是对浏览器的一个建议,PHP 也会检查此项.在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件.实际上,PHP 设置中的上传文件最大值是不会失效的.但是最好还是在表单中加上此项目,因为它可以避免用户在花时

FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解(转)

1.StorageClient与StorageClient1的区别 相信使用happy_fish的FastDFS的童鞋们,一定都熟悉StorageClient了,或者你熟悉的是StorageClient1,两者有什么区别呢? 我们在前面的几篇博文中已经知道,FastDFS存储文件时,是将 FastDFS存储到某个Group的某个Storage的某个路径下.如果你在Storage Server上设置的是两层目录结构的话,则一个文件上传到FastDFS后的File ID一般形如"group1/M01

php文件上传原理详解(含源码)

1.文件上传原理 将客户端的文件上传到服务器,再将服务器的临时文件上传到指定目录 2.客户端配置 提交表单 表单的发送方式为post 添加enctype="multipart/form-data" 3.服务器端配置 file_uploads = On,支持HTTP上传 uoload_tmp_dir = ,临时文件保存目录 upload_max_filesize = 2M,允许上传文件的最大值 max_file_uploads = 20 ,允许一次上传到的最大文件数 post_max_s