您现在的位置是:首页 > 正文

dubbo微服务架构中传递MuitipartFile的问题及解决方式

2024-02-01 04:43:26阅读 6

引言

今天在使用springboot+dubbo+zookeeper搭建的微服务架构项目中使用阿里云oss对象存储去集成图片上传功能时出现如下错误:

Serialized class org.apache.catalina.core.ApplicationPart must implement java.io.Serializable

根据这个错误提示可以看出是由于未序列化引发的问题,但是不知道具体问题出在哪

错误原因

经过资料查询后发现是由于dubbodubbo不能在不同服务间传递MutipartFile,因为MuitipartFile是不可序列化的,需要转为byte[]进行传递

解决方式

在Controller层将MultipartFile转为byte[]传递给Service层,如果需要MultipartFile携带的参数,也可以在Controller层获取后传给Service层。

Controller层

重点是使用multipartFile.getBytes()去将其转化为字节形式

/**
 * <p>
 *
 * </p>
 *
 * @author:雷子杰
 * @date:2022/8/7
 */
@RestController
@Api(tags = "阿里云对象存储ossAPI模块")
public class AliOssController {

    @Reference
    private AliOssService aliOssService;

    @PostMapping("/uploadImage")
    @ApiOperation(value = "图片上传")
    public Result upload(MultipartFile file){
        //因为dubbo中不能传递MultipartFile,所以需要转为字节后传过去再转回来
        byte[] arr=null;
        String fileName = file.getOriginalFilename();//获取文件名
        long fileSize = file.getSize();//获取图片大小
        
        try {
            arr = file.getBytes();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String url = aliOssService.upload(arr,fileName,fileSize);

        return  Result.ok().data("url", url);
    }
}

Service层

重点是使用new ByteArrayInputStream(arr)将传过来的字节转换为流的格式

/**
 * <p>
 *
 * </p>
 *
 * @author:雷子杰
 * @date:2022/8/7
 */
@Service
@Component
@Slf4j
@Transactional
public class AliOssServiceImpl implements AliOssService {

    @Override
    public String upload(byte[] arr, String fileName, long fileSize) {
        InputStream inputStream=null;
        
        inputStream = new ByteArrayInputStream(arr);//将字节转换为流

        //拼接文件夹名字会指定上传到存储空间下面的子文件夹(文件名改为:当前时间到毫秒+uuid+原来文件后缀名)
        String originalFilename= Conts.IMAGESURL
                +System.currentTimeMillis()
                + UUID.randomUUID().toString()
                + fileName.substring(fileName.lastIndexOf("."));

        //使用封装的工具类进行上传
        OssManager.uploadImage(originalFilename, fileSize,inputStream);

        String url=OssManager.bucketDomain+"/"+originalFilename;
        log.debug("文件上传后的路径是{}",url);

        return url;
    }
}

总结

在编程的过程中总会遇到各式各样的问题,只有遇到的多了,总结的多了,我们才会有提升,在未来的道路上走的更远。

网站文章

  • python处理命令行参数

    python处理命令行参数

    导航:起始页 &gt; Dive Into Python &gt; 脚本和流 &gt; 处理命令行参数 &gt;&gt; 深入 Python :Dive Into Python 中文版 Python 从新手到专家 [Dip_5.4b_CPyUG_Release] Find: 10.6. 处理命令行参数 Python

    2024-02-01 04:42:55
  • 【CSS学习】CSS中常用样式大全

    【CSS学习】CSS中常用样式大全,各种在web设计中使用到的css样式

    2024-02-01 04:42:49
  • Redis性能瓶颈揭秘:如何优化大key问题?

    Redis性能瓶颈揭秘:如何优化大key问题?

    Redis大key问题指的是某个key对应的value值所占的内存空间比较大,导致Redis的性能下降、内存不足、数据不均衡以及主从同步延迟等问题。到底多大的数据量才算是大key?没有固定的判别标准,...

    2024-02-01 04:42:42
  • IDEA进行数据库查询返回的结果有Null 最新发布

    IDEA进行数据库查询返回的结果有Null 最新发布

    IDEA查询数据库返回值有Null,解决:去掉空格

    2024-02-01 04:42:35
  • 计算机安全意识小故事,安全故事精选5篇

    安全隐患无处不在,如果掉以轻心,总是事不关己的态度,很有可能酿成悲剧。下面小编给大家介绍关于安全故事,方便大家学习。安全故事1过河的驴子一头驴子背盐渡河,在河边滑了一跤,跌在水里,盐溶化了。驴子站起来...

    2024-02-01 04:42:06
  • Vector扩容机制源码分析

    Vector扩容机制源码分析

    再来稍微聊一下Vector的特点。 继承树Vector继承树如下图:特点(1)允许null值(2)底层使用动态对象数组Object[] elementData(3)默认初始容量是10(4)线程安全,通过synchronized锁得以保证(5)fail-fast机制...

    2024-02-01 04:41:57
  • 算法思想 - 动态规划算法

    算法思想 - 动态规划算法

    在 A[i] - A[i - 1] == A[i - 1] - A[i - 2] 的条件下,{A[i - 2], A[i - 1], A[i]} 是一个等差递增子区间。如果 {A[i - 3], A[...

    2024-02-01 04:41:25
  • vim傻瓜式配置 + git clone的速度慢到难以忍受问题的解决方法~

    vim傻瓜式配置 + git clone的速度慢到难以忍受问题的解决方法~

    一般在github上面看到一个好的开源项目,想要使用它,或者想要研究一下它的源码,这时我们需要使用git clone命令。 git clone就是仓库克隆,把服务端的仓库克隆到本地,和git push...

    2024-02-01 04:41:19
  • 卷积神经网络为什么会这么有效?分析卷积神经网络背后的奥秘

    卷积神经网络为什么会这么有效?分析卷积神经网络背后的奥秘

    From:http://m.elecfans.com/article/669524.html在机器视觉和其他很多问题上,卷积神经网络取得了当前最好的效果,它的成功促使我们思考一个问题,卷积神经网络为什么会这么有效?在本文中,SIGAI将为大家分析卷积神经网络背后的奥秘。思想起源在各种深度神经网络结构中,卷积神经网络是应用最广泛的一种,它由LeCun在1989年提出[1]。卷积神经网络在...

    2024-02-01 04:41:11
  • flush() 不能按顺序输出时解决方法

    如果是在linux下, 首先确认是否添加 ob_start() 和 ob_flush().ob_start();for ($i=1; $i<=10; $i++) { echo $i."<br />\n"; ob_flush(); flush(); usleep(500000);}如...

    2024-02-01 04:40:42