【问题标题】:Download a pdf with server node and vue.js下载带有服务器节点和 vue.js 的 pdf
【发布时间】:2021-04-13 06:21:35
【问题描述】:

我有问题。我必须创建一个链接来下载带有服务器的 pdf,但是当点击链接时,文件没有被下载。

重要的是不要在客户端公开 PDF 链接,而是从服务器下载文件。

请帮帮我!

在前面,我拍了


    <div class="historyNavBtns">
      <a
        v-if="isLoggedIn"
        href="/tutorial"
        @click="goLinkTutorial"
      >
        <fa-icon
          class="btn bg-blue"
          icon="info-circle"
        />
      </a>

我调用api的方法

  methods: {
    async goLinkTutorial () {
      try {
        await api.getLinkTutorial()
      } catch (error) {
        this.$store.dispatch('setMessage', { type: 'error', message: error, timeout: 2000 })
      }
    },
  },

}

在 api.js 中

export async function getLinkTutorial () {
  console.log('test')
  const response = await apiClient.get('/tutorial')
  return response.data
}

在路线中

router.get('/', getTutorial)

在控制器中

import { techLogger } from '../util/logger.js'

export const getTutorial = (req, res) => {
  try {
    res.type('application/pdf').download(new URL('../upload-folder/tutorial.pdf', import.meta.url).pathname, 'tutorial.pdf')
  } catch (error) {
    techLogger.info(error)
  }
}

【问题讨论】:

    标签: javascript node.js express vue.js


    【解决方案1】:

    您应该创建一个指向它的链接并单击它,而不是通过 axios(或 apiClient)获取下载的文档:

        <div class="historyNavBtns">
          <a
            v-if="isLoggedIn"
            href="/tutorial"
            download="tutorial.pdf"
          >
            <fa-icon
              class="btn bg-blue"
              icon="info-circle"
            />
          </a>
    

    如果您坚持在点击处理程序/javascript 中执行此操作,您也可以这样做:

    export async function getLinkTutorial () {
      console.log('test')
      //const response = await apiClient.get('/tutorial')
      //return response.data
      var link = document.createElement('a');
      link.href = '/tutorial';
      link.setAttribute('download', 'tutorial.pdf');
      document.body.appendChild(link);
      link.click();
    }
    

    【讨论】:

    • 谢谢,重要的是不要在客户端公开PDF链接,而是从服务器下载文件以防安全问题。
    • 好吧,你不知道。您以一种或另一种方式向客户端公开 /tutorial,但不应将请求初始化为 XHR 请求,您应该告诉浏览器启动下载尝试。
    猜你喜欢
    • 2012-08-05
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2017-08-14
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多