Dubbo远程调用文件上传服务

dubbo上传文件+oss上传文件服务.zip dubbo上传文件+oss上传文件服务 立即下载

背景:

由于公司内部使用dubbo作为远程服务调用,在使用其他系统的文件上传服务时,系统出现报错。

    @ResponseBody
    @RequestMapping(value = "uploadResourceImg", headers = "content-type=multipart/form-data", method = RequestMethod.POST)
    public RestResult<ResultDto> uploadImage(@RequestParam(value = "file", required = true) MultipartFile file) throws IOException {
        GisResultDto uploadResult = commonUploadService.uploadImage(file.getBytes(), uploadToken);
        log.info("uploadImage 上传图像:【{}】,地址:【{}】", file.getName(), uploadResult.getUrl());
        return RestWrapper.makeOkRsp(uploadResult);
    }
com.alibaba.fastjson.JSONException: write javaBean error, fastjson version 1.2.56, class org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile, fieldName : 0, write javaBean error, fastjson version 1.2.56, class org.springframework.web.multipart.MultipartFileResource, fieldName : resource

百度了一下,大致意思是序列化的时候出现了问题,所以在最初以为是服务调用的时候,序列化问题,网上说基本上都是要加上@JSONField(serialize=false)来对这个文件类型的字段进行序列化过滤,但是我们需要将这个文件作为参数去上传到对应的文件服务器,所以不能过滤。

后来,在controller入口加断点,发现没有进入,所以应该是在外部就进行了拦截,寻找对应的拦截器或者是切面,看看是否有拦截信息。

分析:

后来发现项目是SpringBoot框架,使用AOP进行异常日志拦截,要想json不继续报错,需要对其进行过滤如下:

@Aspect
@Component
@Slf4j
public class LogAop {
    @Pointcut("execution(* cn.com.test..controller..*(..))")
    public void logPointcut() {
    }

    @Around("logPointcut()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        String uri = sra == null ? "" : sra.getRequest().getRequestURI();
        Signature signature = pjp.getSignature();
        String methodName = signature.getName();
        long begin = System.currentTimeMillis();
        Object[] args = pjp.getArgs();
        StringBuilder sb = new StringBuilder();
        for (Object arg : args) {
            //对MultipartFile进行过滤即可
            if (arg instanceof MultipartFile){
                continue;
            }
            if (sb.length() > 0) sb.append(", ");
            sb.append(stringArg(arg));
        }
        String params = sb.toString();
        String ret = null;
        try {
            Object result = pjp.proceed();
            ret = JSON.toJSONString(result);
            return result;
        } catch (Throwable th) {
            ret = "ex: " + th.getClass().getSimpleName() + ": " + th.getMessage();
            throw th;
        } finally {
            long cost = System.currentTimeMillis() - begin;
            log.info("LogAop uri:{}, method:{}, cost:{}, req:{}, result:{}", uri, methodName, cost, params, ret);
        }
    }

    private String stringArg(Object arg){
        if(arg instanceof HttpServletRequest || arg instanceof HttpServletResponse) {
            return arg.toString();
        }
        // 非POJO的参数用JSON转化可能抛出异常
        return JSON.toJSONString(arg);
    }

}

完成:

添加后正常使用,文件上传成功。

【CQUT】从零开始龙芯杯-开始前的准备 不同级别的Cpu对于vivado综合的时间有较大影响,其中Cpu的单核、多核性能以及cache性能影响权重较高。因此,为了保证学习进度和效率,我们建议在Cpu不低于I5 12400的环境下进行学习。Vivado2023.2安装包约100GB,为了保证成功安装建议留出300GB硬盘空间。龙芯杯的许多资料被托管在gitee,你需要git指令将资料克隆到本地。指定用书:CPU设计实战 Loongarch版 作者:汪文祥、邢金璋。Cpu性能对比网站:https://www.cpu114.com/ 阅读详情

相关推荐

SAP PCC成本收集器实战:从配置到结算的完整流程解析

本文详细解析了SAP PCC成本收集器从配置到结算的完整流程,特别适用于重复制造行业。通过实战案例和配置要点,帮助用户掌握物料分类账管理、成本中心费用归集及差异分析等核心功能,提升企业生产成本控制效率。

weixin_29251567的博客 893

dubbo之间传输File文件,将File转成byte数组传输,附上代码

链接博客, https://blog.youkuaiyun.com/qinkaiyuan94/article/details/81879848   https://mp.youkuaiyun.com/postedit/81879848

qinkaiyuan的博客 3126

Raptor码(一):2007RFC5053标准编解码学习

RFC 5053 标准

a_beatiful_knife的博客 3493

Dubbo传输文件

参考博客:https://blog.youkuaiyun.com/qq315737546/article/details/52792037 总结:dubbo协议是不支持File或者FileinputStream的,如果要处理文件,有以下两种思路: 1.dubbo改用hessian通信协议。 2.将文件转化为byte[]数据传输。 ...

he582754810的博客 5428

别再手动更新Excel了!用Jira看板管理你的个人项目(附保姆级配置流程)

本文详细介绍了如何利用Jira看板替代Excel进行个人项目管理,提供从注册到配置的保姆级教程。通过极简看板模式、自动化规则和数据分析功能,帮助用户实现任务可视化、协作高效化和提醒自动化,大幅提升个人工作效率。特别适合需要管理复杂个人项目的用户。

weixin_42699679的博客 228

博途PLC PID仿真LSim_PT1库算法(一阶系统差分方程推导全过程)

博途PLC的PID仿真可以参看下面这篇博客,这篇文章我们主要论坛仿真库LSim的算法由来。如何利用博途PLC PID_Compact 进行PID仿真(一阶系统)_RXXW_Dor的博客-优快云博客博途PLC PID控制器 PID_Compact FB如何使用可以参看下面这篇文章,这里不再赘述。

RXXW_Dor的博客 2858

JavaWeb上传 / 下载文件及dubbo文件上传问题

前言   一次完整的文件传输分为前后端部分。   使用分布式框架dubbo的时候,我们传输文件从controller到service会报序列化的错误,有三种解决方式。 前端 Html   一般也可以放在form表单里面,一起提交,数据格式为FormData <input type="file" class="xxx upload-input" value="上传"/> JS   触发文件上传,并显示文件名称,为了能够上传同名文件,我们采取先清除再传文件的策略,传输依旧是FormData数

长臂人猿的博客 1698

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

为什么都说Dubbo不适合传输大文件?苦思许久的我终于有了答案

背景 之前公司有一个 Dubbo 服务,内部封装了腾讯云的对象存储服务 SDK,是为了统一管理这种三方服务的SDK,其他系统直接调用这个对象存储的 Dubbo 服务。用来避免因平台 SDK 出现不兼容的大版本更新,导致公司所有系统修改跟着升级的问题。 然而因为 Dubbo 并不适合传输大包,所以虽然想法不错,但这种做法还是并不合适,于是这个系统在上线不久就遭废弃没人用了…… 不过系统虽然废弃了,但是我们可以顺着 Dubbo 上传文件的主题来详细分析下,说说看它究竟是因为什么不适合传文件。 Du.

守夜人爱吃兔子的博客 1643

基于深度学习YOLOv10的障碍物检测系统

为了方便用户使用,我们将开发一个图形用户界面(GUI),允许用户上传图像或视频流并查看检测结果。我们使用PySide6开发GUI界面,它是Qt框架的Python绑定,适用于开发跨平台的桌面应用程序。本文详细介绍了如何基于YOLOv10模型构建一个障碍物检测系统,包括数据集准备、模型训练和推理到图形用户界面的开发。通过这一系统,用户可以方便地上传图像或视频流并进行障碍物检测,广泛应用于自动驾驶、机器人导航等领域。

斌擎科技 1052

概率质量函数(PMF)、概率密度函数(PDF)、累积分布函数(CDF)

1.概率分布函数(Probability Distribution Functions) 笔记来源:Probability Distribution Functions (PMF, PDF, CDF) 1.1 离散型:PMF和CDF 1.2 连续型:PDF和CDF 累积分布函数的导数 === 概率密度函数的函数值 dF(x)dx=f(x) \frac{dF(x)}{dx}=f(x) dxdF(x)​=f(x) 概率密度函数与 xxx 轴围成的面积 === 累积分布函数的函数值 ∫−∞xf(x)d

一个搬运知识的笨小孩 3万+

记录一次初用dubbo服务之间用文件做参数经验教训总结

场景:项目有一个导出模板功能,将数据写入指定模板然后再将写好数据的模板导出,在开发时一切正常能将模板导出,但是一部署到服务器就就报错,错误类容大概是File类型的参数不能被序列化之类的。由于是第一次使用dubbo不知道是什么情况,所以花了一点时间查找资料解决问题后总结如下: Dubbo支持配置多种协议,包括Hessian协议,HTTP协议,WebService协议等。我们在使用dubbo构...

打酱油的程序员 682

卫朋:IPD流程落地——产品计划阶段拆解

IPD计划阶段拆解

产品线负责人 956

关于dubbo微服务框架,传送文件报空的问题

关于dubbo微服务框架,传送文件报空的问题 曾经遇到使用阿里的dubbo微服务框架,在做文件上传时远程注入服务,结果发现Controller这层是有文件信息的,但是到了service层文件报空,文件丢失。(如果是直接在Controller层完成文件处理存储就好远程调用没关系了) 开始认为是序列化和反序列话的问题,结果查看源码发现MultipartFile的子类CommonsMultipart

q1035331653的博客 2503

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

阿里巴巴dubbo处理文件上传下载

   注:使用InputStream 作为方法参数的时候,需要将该参数作为方法的最后一个参数,否则会有问题     dubbo和hessian的maven依赖:   &lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;dubbo&lt;/artifactI...

阿O、不拽 1339

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Dubbo系统里面MultipartFile文件传输问题&Dubbo文件上传/传输服务

本篇介绍如何设计一个文件上传/传输功能的dubbo接口及遇到的问题;

qq_43842093的博客 4293

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

使用dubbo远程调用微服务上传文件接口报错

使用dubbo远程调用微服务上传文件接口报错 原因:服务间使用dubbo的rpc远程调用,因为dubbo并不能跨系统传递MultipartFile对象 解决办法: 将MultipartFile对象转化为byte数组传递 例如:控制层接口 @ApiOperation("图片上传") @PostMapping("/imgUpload") public ResponseResult imgUpload(ImgDto imgDto, @RequestParam("file") MultipartFile file)

Jayden的博客 963

springMVC其它配置

一.使用阿里jastjson //在springmvc.xml中配置 <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="com.alibaba.fastjson.support.spring.Fa...

keyuzhang的博客 125

一步一步学Spring Boot(三)

课程名称《一步一步学Spring Boot(三)》学习地址优快云学习地址: http://edu.youkuaiyun.com/lecturer/99451CTO学习地址:http://edu.51cto.com/lecturer/5592452.html课程介绍Spring Boot是现在很热门的一个微服务框架,作为一名Java Web 开发工程师,是必须要掌握它的。本系列课程会一步一步教大家如何使用Spr

IT技术分享 1101

视频教程-一步一步学Spring Boot(三)-Java

一步一步学Spring Boot(三) IT作家,优快云博客讲师,优快云...

weixin_30044941的博客 115

编码技巧——Dubbo文件上传/传输服务

本篇介绍如何设计一个文件上传/传输功能的dubbo接口及遇到的问题;

娜娜米的博客 5075

springboot整合dubbo,集成mongodb实现文件上传服务

一、dubbo概述      Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。      Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。核心部件:Remoting: 网络通信框架,实现了 syn...

FinelyYang的专栏 2066

dubbo(三)dubbo的文件上传

在(dubbo二)文章中,我们将customer和provider分开部署了,这次主要记录文件在customer和provider之间的传输. 如果文件直接在customer中进行保存,不需要传递到provider,则和dubbo就没有关系了. 如果需要传递,如果是使用dubbo协议的话,是不支持 file,inputStream 这种文件,流的传输的. dubbo中customer和pro

能写下来,理解才会更深 2万+

服务间远程调用

Dubbon和GPRC性能更好,OpenFegin性能差一点OpenFegin和GRPC支持跨语言。OpenFegin使用JSON序列化传输,可读性更高。

myli92的博客 1085

dubbo的Multipart文件上传问题

采用dubbo对MultipartFile文件进行传输时,会报invoke method 错误,是因为dubbo并不能跨系统传递这个对象,可以采用Hessian &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;com.caucho&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;he

SummerGo 4006

Dubbo 使用rest协议发布http服务

演示用GitHub地址:https://github.com/suyin58/dubbo-rest-example 1Dubbo_rest介绍 Dubbo自2.6.0版本后,合并了dubbox的restful风格的接口暴露方式,其restful的处理采用的是jboss.resteasy框架。使用该功能可以简便的将dubbo服务直接通过http的方式发布,不需要再使用中转的http...

varyall的专栏 3274
上一篇: 20210907生产问题记录
下一篇: Command line is too long
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值