【常用代码】vue中使用a标签下载文件pdf、docx、doc,xls等,赋值文件名

问题描述

有文件路径,项目域名+文件路径打开,可以直接在浏览器新窗口下载文件,
使用window.open打开还会阅读pdf,而不会下载pdf文件

这种也不是向后台发送请求获取blob文件流

所以用a标签去实现下载文件


解决方案:

提示:这里填写该问题的具体解决方案:

// 使用a标签下载
export function fileDown(blobUrl, filename) {
  const a = document.createElement("a");
  if (!a.click) {
    throw new Error('DownloadManager: "a.click()" is not supported.');
  }
  a.href = blobUrl;
  a.target = "_parent";
  if ("download" in a) {
    a.download = filename;
  }
  (document.body || document.documentElement).append(a);
  a.click();
  a.remove();
}


具体使用:

  1. 在utils里面封装一个工具js,就叫fileDown.js
  2. 在vue项目中引入该js ==>
import { fileDown } from "@/utils/fileDown.js"
  1. 使用方法就是
fileDown(process.env.VUE_APP_BASE_API + item.url, item.name)

process.env.VUE_APP_BASE_API就是你的项目地址,获取获取域名是一样的效果,

192.168.1.6:8080 + /upload/2023/4/14/文件名称_************.pdf
还原就是这样
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个简单的示例代码,演示如何在Spring Boot和Vue实现点击查看多种类型文件(包括docdocxxlsxlsx、pdf): 1. 后端Spring Boot代码: ```java @RestController @RequestMapping("/api/files") public class FileController { @GetMapping("/{fileName}") public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) throws IOException { // 根据文件名获取文件路径 String filePath = "path/to/files/" + fileName; // 读取文件内容 Path path = Paths.get(filePath); Resource resource = new InputStreamResource(Files.newInputStream(path)); // 设置响应头,让浏览器能够正确解析文件类型 HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "inline; filename=" + fileName); // 返回文件内容和响应头 return ResponseEntity.ok() .headers(headers) .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(resource); } } ``` 2. 前端Vue代码: ```vue <template> <div> <ul> <li v-for="file in files" :key="file.name"> <a @click="viewFile(file.name)">{{ file.name }}</a> </li> </ul> <div v-if="selectedFile"> <iframe :src="selectedFileUrl" width="100%" height="500px"></iframe> </div> </div> </template> <script> import axios from 'axios'; export default { data() { return { files: [], selectedFile: null }; }, methods: { getFileList() { axios.get('/api/files') .then(response => { this.files = response.data; }) .catch(error => { console.error(error); }); }, viewFile(fileName) { this.selectedFile = fileName; } }, computed: { selectedFileUrl() { return `/api/files/${this.selectedFile}`; } }, created() { this.getFileList(); } }; </script> ``` 以上示例,后端的`FileController`定义了一个GET请求的接口`/api/files/{fileName}`,用于下载文件。前端的Vue组件,通过调用后端接口获取文件列表,并为每个文件添加点击事件,点击时将文件名赋值给`selectedFile`,然后通过动态生成的URL来展示文件内容。 请根据实际情况修改代码文件路径和URL路径。希望对您有所帮助!如有更多问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿民不加班

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值