后端直接从文件URL下载文件

news/2024/10/20 14:35:56/

后端直接从文件URL下载文件

问题描述:

需要直接在后端根据文件url下载文件

解决方案:

可根据实际情况改代码:

public AidingStudentsImportExcelRespVO excelResolver(String url, Long aidingStudentsManageId){//创建temp.xlsxString path = this.getClass().getResource("").getPath();//注意getResource("")里面是空字符串String path1=path+"importexcel";try {File dir = new File(path1);if(!dir.exists()){dir.mkdirs();//创建目录}File f = new File(path1,"temp.xlsx");f.deleteOnExit();if(!f.exists()){f.createNewFile();}} catch (Exception e) {e.printStackTrace();}//从url读取出文件到已创建的文件中URL website = null;ReadableByteChannel rbc = null;FileOutputStream fos = null;try {website = new URL(url);rbc = Channels.newChannel(website.openStream());fos = new FileOutputStream(path1+"/temp.xlsx");//本地要存储的文件地址 例如:test.txtfos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);} catch (Exception e) {e.printStackTrace();}finally{if(fos!=null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}if(rbc!=null){try {rbc.close();} catch (IOException e) {e.printStackTrace();}
​}}//导入名单File file = new File(path1+"/temp.xlsx");AidingStudentsImportExcelRespVO aidingStudentsImportExcelRespVO=null;try {MultipartFile cMultiFile = new MockMultipartFile("file", file.getName(), null, new FileInputStream(file));List<AidingStudentsImportExcelVO> list = ExcelUtils.read(cMultiFile, AidingStudentsImportExcelVO.class);aidingStudentsImportExcelRespVO = aidingStudentsImportListService.aidingStudentsImportExcelListFromCloud(aidingStudentsManageId, list);
​} catch (IOException e) {throw exception(AIDING_STUDENTS_IMPORT_LIST_FILE_IMPORT_ERROR);}
​
​// 删除excel文件file.deleteOnExit();
​// 返回return aidingStudentsImportExcelRespVO;
​}

关键部分(NIO):

       }//从url读取出文件到已创建的文件中URL website = null;ReadableByteChannel rbc = null;FileOutputStream fos = null;try {website = new URL(url);rbc = Channels.newChannel(website.openStream());fos = new FileOutputStream(path1+"/temp.xlsx");//本地要存储的文件地址 例如:test.txtfos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);} catch (Exception e) {e.printStackTrace();}finally{if(fos!=null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}if(rbc!=null){try {rbc.close();} catch (IOException e) {e.printStackTrace();
​

另一种简单方法(IO):

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
​
/***从网络下载资源到本地*步骤:1 定义URL,创建URL对象2 打开URL对应的输入管道3 使用输入管道读取URL的数据,使用内存流(ByteArrayOutputStream)接收URL的数据4  网络URL的数据最终变成   byte[]5  将内存流的数据写入到本地磁盘*/
public class DownResource {public static void main(String[] args) {//1定义urlString urlPath = "http://172.16.59.99:9000/fdy-data/621b3868410512079f5501608a613466fb99c438b3e1583192a852c5b5e8f2b5.xlsx";try {//2创建URL对象URL url = new URL(urlPath);//打开URL对应的输入管道try(InputStream in = url.openStream();//内存流用来存储URL的数据ByteArrayOutputStream out = new ByteArrayOutputStream();//带有缓冲区的磁盘输出管道,唯一职责将内存流的字节数组写入到本地磁盘BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream("logo.xlsx"))){byte [] buf= new byte[1024];int length = 0;//使用URL的输入管道,读取URL的数据while((length = in.read(buf))!=-1) {//内存流写入url读取的数据out.write(buf,0,length);}out.flush();//out.toByteArray()里面存放了百度LOGO的字节数组//bos.write(out.toByteArray());内存流数据写入本地磁盘bos.write(out.toByteArray());bos.flush();}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
​

参考博客:

java 实现从url路径中下载文件到本地_con.setrequestproperty user-agent-CSDN博客

IO流【7】--- 通过IO流实现网络资源下载,通过URL地址下载图片等_后端 url地址转换为io流-CSDN博客


http://www.ppmy.cn/news/1540540.html

相关文章

《深度学习》OpenCV 风格迁移、DNN模块 案例解析及实现

目录 一、风格迁移 1、什么是风格迁移 2、步骤 1&#xff09;训练 2&#xff09;迁移 二、DNN模块 1、什么是DNN模块 2、DNN模块特点 1&#xff09;轻量 2&#xff09;外部依赖性低 3&#xff09;方便 4&#xff09;集成 5&#xff09;通用性 3、流程图 4、图像…

JavaWeb开发4

JS对象 Array Array对象用于定义数组 var 变量名new Array(元素列表)&#xff1b; var 变量名[元素列表] 访问 arr[索引]值&#xff1b; 注意&#xff1a;JS中数组相对于Java中集合&#xff0c;数组的长度是可变的&#xff0c;JS是弱类型&#xff0c;所以可以存储任意类型…

js 精确计算(加减乘除)

js 精确计算(加减乘除) 工具类CalcUtil.js class CalcUtil {// 两数相加calcAdd(num1, num2) {var r1, r2, m;try {r1 num1.toString().split(.)[1].length;} catch (e) {r1 0;}try {r2 num2.toString().split(.)[1].length;} catch (e) {r2 0;}m Math.pow(10, Math.max…

使用 Docker 升级 MySQL 的优化步骤与说明

在升级 MySQL 之前&#xff0c;进行系统化的准备和实施能够显著降低数据丢失的风险&#xff0c;并确保顺利过渡。以下是优化后的详细步骤及分析。 一、备份原数据库所有数据 重要性分析 在任何数据库操作中&#xff0c;备份都是最重要的一步。确保备份包含所有数据库、表及其…

Mysql(2)—SQL语法详解(通俗易懂)

一、关于SQL 1.1 简介 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库的标准编程语言。它主要用于数据的查询、插入、更新和删除等操作。SQL最初在1970年代由IBM的研究人员开发&#xff0c;旨在处理关系数据模型…

ElementPlus-Table表格-单选--TypeScript进阶篇

今天看个例子&#xff0c;这个例子是ElementPlus的组件Table表格下面的单选 <template> <el-table ref"singleTableRef" :data"tableData" highlight-current-row style"width: 100%" current-change"hand…

java-collection集合整理0.9.4

java-集合整理0.9.0 基本结构基本概念实例化举例遍历获取指定值 2024年10月17日09:43:16–0.9.0 2024年10月18日11:00:59—0.9.4 基本结构 Collection 是最顶级的接口。分为 List 和 Set 两大类。List 分为&#xff1a;ArrayList、LinkedList、Vector。Set 分为&#xff1a;Ha…

OpenCV高级图形用户界面(13)选择图像中的一个矩形区域的函数selectROI()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 允许用户在给定的图像上选择一个感兴趣区域&#xff08;ROI&#xff09;。 该功能创建一个窗口&#xff0c;并允许用户使用鼠标来选择一个 ROI。…