背景

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

执行结果如下



大功告成

easy-excel读取远程地址获得文件进行上传的更多相关文章

  1. Linux本机和远程服务器之间文件的上传和下载 rz sz

    tar zxvf lrzsz-0.12.20.tar.gz 解压安装包   下载地址:链接:https://pan.baidu.com/s/1KMS1QlyOhpXiYeaWdNBAyw 提取码:08 ...

  2. C# HttpWebRequest向远程地址Post文件

    HttpWebRequest向远程地址Post文件 /// <summary> /// 上传文件到远程服务器 /// </summary> /// <param name ...

  3. xctf-i-got-id-200(perl网页文件+ARGV上传造成任意文件读取)

    打开url发现有三个链接,点进去都是.pl文件,且只有files可以上传文件. .pl文件都是用perl编写的网页文件 这里上传了又将文件的内容全部打印出来,那么猜想后台应该用了param()函数. ...

  4. 文件一键上传、汉字转拼音、excel文件上传下载功能模块的实现

    ----------------------------------------------------------------------------------------------[版权申明: ...

  5. ASP.NET MVC实现Excel文件的上传下载

    在应用系统开发当中,文件的上传和下载是非常普遍的需求.在基于.NET的C/S架构的项目开发当中,有多种方案可以实现文件的上传和下载(httpwebrequest.webclient等),而且多采用异步 ...

  6. web操作文件的上传到服务器 并可下载 并且读取出来

    1.文件的上传-servlet实现文件上传---核心API—DiskFileItemFactory 一.文件上传概述 l  实现web开发中的文件上传功能,需完成如下二步操作: •    在web页面 ...

  7. HTML5 文件域+FileReader 分段读取文件并上传(七)-WebSocket

    一.单文件上传实例 HTML: <div class="container"> <div class="panel panel-default" ...

  8. Python_编写UDP通信编解码类、文件的上传、远程执行命令、黏包

    1.UDP通信编解码类 (1) 类 # ------------------UDP通信解码编码类------------------------ from socket import * class ...

  9. flask 文件的上传下载和excel操作

    文件的下载 from flask import send_from_directory @excel_bp.route('/get_attachment/<path:filename>') ...

  10. ASP.NET上传文件,已经上传的大小保存在session中,在另一个页面中读取session的值不行

    想自己做个ASP.NET上传文件时显示进度条的, 按照自己的想法,其实也就是显示每次已经上传的字节,从网上找到一个方法是能够把文件变成流以后再慢慢写入的,我在那个循环写入的时候每循环一次都把已经上传的 ...

随机推荐

  1. oracle-11.2.0.4静默安装----RedHat7.5

    1.配置/etc/hosts文件和关闭seliux和firewall防火墙 编辑/etc/hosts文件 [root@henry ~]# vim /etc/hosts [root@henry ~]# ...

  2. 项目引入fastclick 导致ios中input需要多次点击才能触发focus

    main.js中引入之后的修改 import FastClick from "fastclick"; FastClick.prototype.focus = function (t ...

  3. java绘图技术

    ![](https://img2022.cnblogs.com/blog/2648796/202203/2648796-20220330191231939-149557321.png)

  4. linux学习之vi

    vi 删除当前行dd 删除当前行及下面内容 dG 删除第2行到第3行2d 3d 删除指定行,删除第5行  5dd 删除当前行以下3行  d3

  5. OSIDP-线程-04

    进程和线程 进程具有两个相互独立的特点: 1.资源所有权:进程包括存放进程映像的虚拟地址空间,具有对资源的控制权. 2.调度/执行:进程具有运行状态和优先级,是可被 OS 调度和分派的实体. 通常将分 ...

  6. OO_Lab2总结博客

    OO_Lab2 一.单元内容 本单元内容为规格化设计,即通过参考已经完成的JML描述实现一个社交网络相关功能. 本单元整体来说难度不大,但是却是我最惨的一次作业,所以本博客可能会主要谈一谈测试中的一些 ...

  7. Python第四章

    import datetime # 定义一个列表 mot = ["今天星期一:\n坚持下去不是因为我坚强,而是因为我别无选择.",        "今天星期二:\n含泪播 ...

  8. 循环文件夹汇总所有发票开具Excel文件数据

    'xlsx cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 8.0;hdr=no;imex= ...

  9. mysql知识点二

    1.mysql中的语言有哪些?分别代表什么意思1.DDL(Data Define Language) 数据定义语言2.DML(Data Manipulation Language) 数据操作语言3.D ...

  10. Flush cache via menu in D365FO

    Most of the time it is a caching issue because D365fO is (like previous versions) a master of cachin ...