vue项目中下载静态资源里的pdf文件_vue下载静态文件-CSDN博客
Vue打包后下载静态资源里的pdf文件

1.把文件放在项目目录src/assets文件下

2.在项目是用a标签下载

<a
              target="_blank"
              rel="noopener noreferrer"
              :href="
                require('@/assets/pdf/技术规范标准.pdf')
              "
              download="技术规范标准.pdf"
              style="color: #1890ff"
              >点击此处下载链接</a
            >

以上项目运行会报错

Failed to compile.
./src/assets/download.pdf 1:0 Module parse failed: Unexpected token (1:0) You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders (Source code omitted for this binary file)

3.需要在vue.config.js中配置!!!

代码 

 configureWebpack: {
    name: name,
    resolve: {
      alias: {
        '@': resolve('src')
      }
    },
    module: {
      rules: [{
        test: /\.pdf$/,
        use: [{
          loader: 'url-loader',
          options: {
            name: 'files/[name].[ext]'
          }
        }]
      }]
    }
  },

 public静态文件下 实现下载本地文件 docx,excel 等

第一步:首先要把自己所需要下载的文件放入public文件下

第二步:参考以下代码:

  <el-button type="primary" size="mini" @click="downloadAttachment">下载</el-button>

    downloadAttachment() {
      console.log("尝试下载文件...");
      const attachmentUrl = "/static/files/事故档案.docx";
      const link = document.createElement("a");
      link.href = attachmentUrl;
      link.download = "事故档案.docx";
      document.body.appendChild(link); // 很重要,添加到 DOM
      link.click();
      document.body.removeChild(link); // 下载完后移除
    },

第三步:注意点

出现这种情况的原因 是因为路径不对,选择相对路径 可以a标签检查下自己的路径  

a标签下载pdf成预览状态↓

<a
              href="/static/files/cc方标准.pdf"
              target="_blank"
              rel="noopener noreferrer"
              style="color: #1890ff"
              >点击此处链接</a
            >

 

<a href="/static/files/事故档案.docx" download>下载事故档案</a>

// import './mock/index.js';  // 该项目所有请求使用mockjs模拟 去掉mock

 页面接口url下载

word文件:
.doc格式的设置为:application/vnd.msword;charset=utf-8

pdf文件
.pdf格式的设置为:application/pdf;charset=utf-8

excel文件:
.xls格式的设置为:application/vnd.ms-excel
.xlsx格式的设置为:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

zip文件:
. zip格式的设置为:application/zip


/*  mineType  文件类型例如:
	* 下载 Excel :    "application/vnd.ms-excel"
	*下载 Word : 	 "application/msword"
	*下载 Zip 方法:  "application/zip"
	*下载 Html 方法: "text/html"
	* 下载 Markdown   "text/markdown"
	* *下载pdf         "application/pdf"
*/

responseType: "blob",   

let blob = new Blob([response.data], { type: "application/zip" }); //注意是response 或者 response.data
let url = window.URL.createObjectURL(blob);  这三句最重要!!!

//普通代码
axios.post(postUrl, params, {responseType: 'arraybuffer'}).then(res => {
    // 创建Blob对象,设置文件类型
    let blob = new Blob([res.data], {type: "application/vnd.ms-excel"})
    let objectUrl = URL.createObjectURL(blob) // 创建URL
    location.href = objectUrl;
    URL.revokeObjectURL(objectUrl); // 释放内存
})

 


//通用模板下载、导出 excel
export function getFiles(obj) {
    return request({
        url: '/api/pu/unite/download/template',
        method: 'get',
        params: obj,
        responseType: "blob",
    });
}

//导出excel
downloadAll1() {
      getFiles({
        ledgerId: row.ledgerId
      })
        .then((response) => {
          let blob = new Blob([response.data], { type: "application/zip" });
          let url = window.URL.createObjectURL(blob);
          const link = document.createElement("a"); // 创建a标签
          link.href = url;
          link.download = "模板下载"; // 重命名文件
          link.click();
          URL.revokeObjectURL(url); // 释放内存
          this.checkList = [];
        })
        .catch((error) => {
          console.log(error.data);
        });
        
    },

downloadAll2() {
      axios({
        method: "get",
        url: "api/TemplateDownload/GetAllTemplateZIP",
        headers: {
          "content-type": "application/json; charset=utf-8",
          Authorization: Cookies.get("token") || "",
        },
        responseType: "blob",
      })
        .then((response) => {
          let blob = new Blob([response.data], { type: "application/zip" });
          let url = window.URL.createObjectURL(blob);
          const link = document.createElement("a"); // 创建a标签
          link.href = url;
          link.download = "模板下载"; // 重命名文件
          link.click();
          URL.revokeObjectURL(url); // 释放内存
          this.checkList = [];
        })
        .catch((error) => {
          console.log(error.data);
        });
        
    },


//excel 
let blob = new Blob([response.data], { type: "application/vnd.ms-excel" });

dl() {
      axios({
        method: "get",
        url: "http://10.180.170.3:8794/tRptMwStdClt/exportData?time=202104",
        responseType: "arraybuffer",
      })
        .then((response) => {
          console.log(response);
          let blob = new Blob([response.data], {
            type: "application/vnd.ms-excel",
          });
          let url = window.URL.createObjectURL(blob);
          const link = document.createElement("a"); // 创建a标签
          link.href = url;
          link.download = "模板下载"; // 重命名文件
          link.click();
          URL.revokeObjectURL(url); // 释放内存
          this.checkList = [];
        })
        .catch((error) => {
          console.log(error.data);
        });
    },

获取到了后台传过来的excel文件 前端用vue怎么接收并导出? - 中文 - Vue Forum

vue.js前端实现excel表格导出和获取headers里的信息 - 五个半柠檬 - OSCHINA - 中文开源技术交流社区

java后台需要设置

 response.addHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
 response.setHeader("Access-Control-Expose-Headers","Content-Disposition");

才能获取到文件名等信息

 // 导出execel2
    handleExcel() {
      this.$http({
        url: this.$http.adornUrl(url),
        method: "post",
        responseType: "blob",//!!!!
        params: this.$http.adornParams({
          userAccount: this.userName,
        }),
      }).then((res) => {
        // console.log(res, "res");
        let blob = new Blob([res.data], { type: "application/vnd.ms-excel" });
        let fileName = decodeURI(
            response.headers["content-disposition"].split(";")[1].split("=")[1]
          );
        let url = window.URL.createObjectURL(blob);
        const link = document.createElement("a"); // 创建a标签
        link.href = url;
        link.download = fileName; // 重命名文件
        link.click();
        URL.revokeObjectURL(url); // 释放内存
      });
    },

Logo

Vue社区为您提供最前沿的新闻资讯和知识内容

更多推荐