背景
目的
尝试前端上传文件到文件存储器,然后请求的时候带上这个路径,后台解析这个路径,做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"; }
执行结果如下
大功告成