From d3c0bd03836952535ef1e67cbea04fcdcffbc679 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Thu, 26 May 2022 17:14:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E4=BA=AB=E7=9A=84=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../driver/controller/DownloadController.java | 56 +++++ web/src/pages/Share.vue | 230 +++++++++++------- 2 files changed, 192 insertions(+), 94 deletions(-) create mode 100644 driver/src/main/java/xyz/longicorn/driver/controller/DownloadController.java diff --git a/driver/src/main/java/xyz/longicorn/driver/controller/DownloadController.java b/driver/src/main/java/xyz/longicorn/driver/controller/DownloadController.java new file mode 100644 index 0000000..b4e034a --- /dev/null +++ b/driver/src/main/java/xyz/longicorn/driver/controller/DownloadController.java @@ -0,0 +1,56 @@ +package xyz.longicorn.driver.controller; + +import cn.hutool.core.net.URLEncodeUtil; +import cn.hutool.http.HttpUtil; +import lombok.SneakyThrows; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import xyz.longicorn.driver.pojo.FileInfo; +import xyz.longicorn.driver.service.FileService; + +import javax.annotation.Resource; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; + +@RestController +public class DownloadController { + @Resource + private FileService fileService; + + @SneakyThrows + @RequestMapping("/download") + public void download(String id, HttpServletResponse response) { + System.out.println(id); + String[] idList = id.split(","); + final FileInfo file = fileService.getById(id); + // TODO 验证文件的信息 + + response.setHeader("Content-Disposition", "attachment; filename="+file.getName() + +"; filename*=utf-8''" + URLEncodeUtil.encode(file.getName())); + final ServletOutputStream os = response.getOutputStream(); // 获取网络输出流 + InputStream is = null; + if(file.getPath().startsWith("http")){ + // 对于网络文件 直接 先下载在输出 + URL url = new URL(file.getPath()); + URLConnection connection = url.openConnection(); // 通过网址打开一个连接 + is = connection.getInputStream();//获取文件内容的输入流 + }else{ + is = new FileInputStream(file.getPath()); // 获取文件输入流 + } + + byte[] bytes = new byte[10240]; + int len; + while ((len = is.read(bytes)) != -1) { + os.write(bytes, 0, len); + } + os.close(); + is.close(); + +// response.getWriter().println("xxx"); + } + +} diff --git a/web/src/pages/Share.vue b/web/src/pages/Share.vue index 35bfae8..20661fd 100644 --- a/web/src/pages/Share.vue +++ b/web/src/pages/Share.vue @@ -1,3 +1,111 @@ +