dubbo系统里面MultipartFile文件传输问题

今天遇到一个问题,在Controller 层里面,直接使用MultipartFile 来接收上传的图片,遇到几个坑。
一、在spring配置文件里面配置文件上传

 <!--文件上传-->
    <bean name="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
        <property name="defaultEncoding" value="UTF-8" />
        <property name="maxUploadSize" value="5242880" />
    </bean>

我在Controller层和service层的spring配置文件里面都设置了这个配置。
二、怎么实现实现远程调用
看了看MultipartFile的源码发现,这东西是一个接口,其实传进来的是他的一个commons实现类而已,dubbo明显不能跨系统传递这个对象,自己当初一直报invoke method 错误,百度了一下,发现另一个好用的Hessian

pom文件,我的provider和consumer都有这个

 <dependency>
            <groupId>com.caucho</groupId>
            <artifactId>hessian</artifactId>
            <version>4.0.7</version>
        </dependency>
        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty</artifactId>
            <version>6.1.26</version>
        </dependency>

在service层就是我们的provider里面将需要的服务注册成Hessian协议的就可以了。
我的spring-service.xml

  <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="taotao-manager-service-cxl" />
    <dubbo:registry protocol="zookeeper" address="192.168.11.131:2181" />
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:protocol name="hessian" port="20887"/>

    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service protocol="dubbo" interface="com.fengqu.service.SaveItemAndDesc" ref="saveItemAndDescImpl"/>
    <dubbo:service protocol="hessian" interface="com.fengqu.service.UploadImageService" ref="uploadImageImpl"/>

然后look一下dubbo-amdin

这里写图片描述
注册上了

consumer消费者那儿注册一下
我的spring-mvc.xml

<!-- 引用dubbo服务 -->
    <dubbo:application name="taotao-web-cxl"/>
    <dubbo:registry protocol="zookeeper" address="192.168.11.131:2181"/>

    <dubbo:reference protocol="dubbo" interface="com.fengqu.service.SaveItemAndDesc" id="saveItemAndDescImpl"/>
    <dubbo:reference protocol="hessian" interface="com.fengqu.service.UploadImageService" id="uploadImageImpl"/>

dubbo-amdin也注册上了,就不贴图了。

发现能传递这个对象了,但是最后发现MultipartFile.getInputStream() 拿不到InputStream了,没办法只能用byte数组来传递这个InputStream了。

Controller

import org.apache.commons.io.IOUtils;

byte[] arr = null;
        try {
            arr = IOUtils.toByteArray(uploadFile.getInputStream());
        }...

service

new ByteArrayInputStream(arr)

ok了,最后图片上传成功
这里写图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值