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

科技资讯 投稿 6400 0 评论

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

背景

目的

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

原方法

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可以调用吗,当然可以了。

正确演示

这里

主要代码如下:

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"; }

执行结果如下

大功告成

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

赞同 (25) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽