首页 > 其他分享 >easy-excel读取远程地址获得文件进行上传

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

时间:2023-04-05 17:48:36浏览次数:45  
标签:file 读取 url excel URL read easy new

背景

作为一个快五年的程序员,一直以来还没有自己维护过自己的技术栈,最近也是有时间,所以也是下定决心,从头开始,一步一步的夯基础。最近在系统化的学习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"; }

执行结果如下


大功告成

标签:file,读取,url,excel,URL,read,easy,new
From: https://www.cnblogs.com/cj8357475/p/17289894.html

相关文章

  • 01]TMS FlexCel VCL & FMX v7.8的下载和安装
    00]TMS FlexCel VCL & FMX v7.8的下载链接:https://pan.baidu.com/s/12RhG-d6nsX5EZx0bVtIrFw提取码:mhq201]TMSFlexCelVCL&FMXv7.8的安装DELPHI10.3安装TMSFlexCelVCL&FMXv7.8方法:1、文件解压到:D:\TMSFlexCelVCL&FMXv7.82、添加路径:D:\TMSFlexCelVCL......
  • 使用python读取指定目录下的指定类型文件
    准备工作:设置指定的路径,使用os.listdir()方法获取路径下所有的文件importospath="d:\\data"#设置路径dirs=os.listdir(path)#获取指定路径下的文件循环判断:使用os.path.splitext()方法筛选出指定类型的文件foriin......
  • 最近遇到的若干Web前端问题:disable和readonly,JqueryEasyUI,KindEditor
     最近项目中用到了JqueryEasyui和KindEditor等框架组件,问题真不少啊~ 一些看起来很简单理所当然的事情,竟然花费了不少时间,才解决好~  1.readonly和disable的区别 readonly:只读,不可编辑,提交表单时,值会提交到后端。 disable:禁止(包含了“只读”......
  • 关于python中使用json.load()从json文件中读取数据转换成字典
    在json模块中,我们可以经常会用到load()与loads(),其中两者的区别如下json.load()从json文件中读取数据转抱为dict类型json.loads()将str类型的数据转换为dict类型这里笔者主要说明json.load()的用法,举例说明,如下有一json文件,ip-ranges.json,内容如下:这里我们将使用json.load(......
  • pdf提取excel表格-财务报表
    方式一、本来是pdf可以直接用acrobatpdf,如果不行就粘贴到word然后粘贴到excel然后分列。一般第二种的格式会好很多。方式二、https://www.adobe.com/acrobat/online/pdf-to-excel.html方式三、[Tabula:从PDF中提取表格](https://tabula.technology/) ......
  • EasyUI闪屏,EasyUI页面加载提示:原理+代码+效果图
    使用EasyUI时,有个经常遇到的问题,页面还没有渲染完成的时候,就展现了。刚刚开始很混乱,等加载完成后,就好了。    $.parser.onComplete,这个是在所有组件解析完成后执行的事件。其实这个事件很有用的。很多在布局用到easyui的时候总会出现一个问题。就是在一进入主界面的时候,页......
  • #yyds干货盘点#【愚公系列】2023年04月 .NET CORE工具案例-使用MailKit使用POP3协议进
    前言1.MailKit简介MailKit是最流行且最强大的.NET邮件处理框架之一,下面为大家简单介绍MailKit的使用方式(IMAP为例)2.MailKit功能安全SASL身份验证支持CRAM-MD5、DIGEST-MD5、LOGIN、NTLM、OAUTHBEARER、PLAIN、SCRAM-SHA-1、SCRAM-SHA-256、SCRAM-SHA-512和XOAUTH2......
  • EasyCVR视频融合平台新增告警预案录像保留天数的设置
    EasyCVR平台的告警功能,可以对监控设备上传的告警(离线、遮挡、故障等)及AI监测的异常情况进行及时告警,支持对告警时刻进行抓拍、录像,并能通过语音、短信、APP、消息通知、微信、邮件等方式,将告警消息推送给管理人员。我们在前期的文章中为大家介绍过EasyCVR平台的告警预案功能,该功......
  • EasyCVR新增功能:Windows系统下托盘可显示进程图标
    EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、宇视SDK等(具体见下图)。近期我们对EasyCVR新增了托盘显示......
  • Hot Start Up (easy version) CF1799
    你有两个CPU,n个程序(m个类型)要运行。在不同条件下程序运行的时间不同,但连续运行的时间满足小于等于在不连续状态下运行的时间。  #include<iostream>#include<cstring>#include<queue>usingnamespacestd;constintN=5002;#defineintlonglong#definei......