easy-excel读取远程地址获得文件进行上传

背景

作为一个快五年的程序员,一直以来还没有自己维护过自己的技术栈,最近也是有时间,所以也是下定决心,从头开始,一步一步的夯基础。最近在系统化的学习easy-excel,今天遇到了一个问题,特意记录一下。

目的

尝试前端上传文件到文件存储器,然后请求的时候带上这个路径,后台解析这个路径,做excel的导入

原方法

之前都是上传file,后台用MultipartFile接口,然后直接调用read解析的方式。

postman调用

后端

点击查看代码
/**
     * 文件上传
     * <p>
     * 1. 创建excel对应的实体对象 参照{@link UploadData}
     * <p>
     * 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener}
     * <p>
     * 3. 直接读即可
     */
    @PostMapping("upload")
    @ResponseBody
    public String upload(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead();
        return "success";
    }
注释:后端的demo采用的是源码的demo,地址为:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java

现方法

错误的案例

点击查看代码
EasyExcel.read(url, UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead();
###执行结果:
点击查看代码
`com.alibaba.excel.exception.ExcelAnalysisException: File D:\ideaWorkspace\springboot-dev\https:\dev-test-obs.obs.cn-east-3.myhuaweicloud.com\web\测试.xlsx not exists.

` 说明找不到路径参数,可以很明显的看到使用的是项目的路径+请求的路径,这个肯定是不行的。 ###问题定位

跟踪一下源码

发现这里调用的是file,file只能获得相对路径,获取不到远程路径。
那么怎么解决这个问题呢,既然这个api不好用,那还有其他的api可以调用吗,当然可以了。

正确演示

我们先百度搜一下,获得远程路径的方法

这里

主要代码如下:

点击查看代码
import java.net.URL;    
 
public static void main(String[] args) {
        try {
            URL url = new URL("http://10.xxx/xxx/abc.xlsx");
            URLConnection connection = url.openConnection();
            InputStream is = connection.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is,"gb2312"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

运用到我们项目

点击查看代码
/**
     * 这边模拟文件上传到文件服务器上,返回一个链接,需要读取这个链接然后转化为InputStream继续读取
     * @param url
     * @return
     */
    @PostMapping("uploadUrl")
    @ResponseBody
    public String uploadUrl(  String url ) throws URISyntaxException, IOException {
        URL urls = new URL(url);
        URLConnection connection = urls.openConnection();
        InputStream is = connection.getInputStream();
        EasyExcel.read(is, UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead();
        return "success";
    }

执行结果如下

大功告成

posted @ 2023-04-05 17:27  小陈子博客  阅读(722)  评论(0编辑  收藏  举报