栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习java遇到的错误

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习java遇到的错误

项目场景:

提示:这里简述项目相关背景:

FastDFSClient上传文件提示空指针异常,MultipartFile获取不到文件 问题描述

在文件上传时一直提示空指针异常,一开始以为时虚拟机的连接错误,先后修改连接地址,修改配置文件等做了很多无用功。最后发现方法中参数获取文件时获取不到,参数file直接就是null.
最初代码如下:

@Value("${FILE_SERVER_URL}")
    private String FILE_SERVER_URL;//文件服务器地址
    //上传功能
    @PostMapping("upload")
    public Result upload(MultipartFile file){
        try{
            FastDFSClient client = new FastDFSClient("fdfs_client.conf");
            String str = client.uploadFile(file.getBytes(),"jpeg");
            String result = FILE_SERVER_URL + str;
            return new Result(true,StatusCode.OK,"上传成功",result);
        }catch (Exception e){
            e.printStackTrace();
            return new Result(false,StatusCode.ERROR,"上传失败",null);
        }
    }

原因分析:

提示:这里填写问题的分析:
自己找了好长时间没有解决错误,最后看到一篇分析,突然就理解了
spring-boot自带的org.springframework.web.multipart.MultipartFile
和Multipart产生冲突,如果同时使用了MultipartResolver 和ServletFileUpload,就会在iter.hasNext()返回false.然后整个循环就跳出去了。整个问题产生的原因是Spring框架先调用了MultipartResolver 来处理http multi-part的请求。这里http multipart的请求已经消耗掉。后面又交给ServletFileUpload ,那么ServletFileUpload 就获取不到相应的multi-part请求。因此将multipartResolve配置去除,问题就解决了。单文件的话只需要一个变量即,多文件上传的话就将MultipartFile改为数组,然后分别上传保存即可。


解决方案:

提示:这里填写该问题的具体解决方案:将方法中参数改为数组,在读取文件时先将数组toString()转成字符在获取字节即可getBytes()。试了一下果然解决了错误。

修改后代码如下:

 @Value("${FILE_SERVER_URL}")
    private String FILE_SERVER_URL;//文件服务器地址
    @PostMapping("upload")
    public Result upload(MultipartFile[] file) {
        try {
            //2、创建一个 FastDFS 的客户端
            FastDFSClient fastDFSClient = new FastDFSClient("fdfs_client.conf");
            //3、执行上传处理
            String path = fastDFSClient.uploadFile(file.toString().getBytes(),"jpeg");
            //4、拼接返回的 url 和 ip 地址,拼装成完整的 url
            String url = FILE_SERVER_URL + path;
            return new Result(true, StatusCode.OK, "上传成功",url);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, StatusCode.ERROR, "上传失败");
        }
    }
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号