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";
}
现方法
错误的案例
点击查看代码
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";
}
执行结果如下
大功告成
本文来自博客园,作者:小陈子博客,转载请注明原文链接:https://www.cnblogs.com/cj8357475/p/17289894.html