vue如何根据url下载非同源文件

我可以给你详细讲解一下vue如何根据url下载非同源文件的完整攻略:

1. axios下载文件

通过axios来下载非同源文件是常见的做法。具体操作步骤如下:

引入axios库

首先需要在vue项目中引入axios库。

import axios from 'axios';

下载文件

然后通过axios发起get请求,通过responseType设置返回的数据格式为blob类型,最后将返回的文件保存到本地。

axios({
  method: 'get',
  url: 'http://xxx.xxx.com/uploads/file/xxx.doc',
  responseType: 'blob'
}).then(res => {
  const content = res.data;
  const blob = new Blob([content]);
  const fileName = 'example.doc';
  const href = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = href;
  link.download = fileName;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  URL.revokeObjectURL(href);
});

其中,设置responseType为blob类型可以直接将后端返回的文件流转化成二进制数据,方便文件本地保存。

最后,通过创建一个a标签,设置其download属性为文件名,将其添加到body中,并模拟用户点击来完成文件下载。

实例演示

<template>
  <div class="file-download">
    <Button @click="downloadFile">Download File</Button>
  </div>
</template>

<script>
import { Button } from 'ant-design-vue';
import axios from 'axios';

export default {
  name: 'FileDownload',
  components: {Button},
  methods: {
    downloadFile() {
      axios({
        method: 'get',
        url: 'http://xxx.xxx.com/uploads/file/xxx.doc',
        responseType: 'blob'
      }).then(res => {
        const content = res.data;
        const blob = new Blob([content]);
        const fileName = 'example.doc';
        const href = URL.createObjectURL(blob);
        const link = document.createElement('a');
        link.href = href;
        link.download = fileName;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        URL.revokeObjectURL(href);
      });
    }
  }
}
</script>

2. fetch下载文件

fetch也是进行文件下载的常见方式。与axios不同的是,通过fetch请求下载文件有一个需要注意的点,就是需要在请求头中添加'Access-Control-Allow-Origin: *'字段,否则可能会出现跨域问题。

具体操作步骤如下:

下载文件

通过fetch发起get请求,设置credentials为'include',设置headers中的'Access-Control-Allow-Origin'为'*',通过response类型的blob将响应的数据转换为二进制数据进行本地保存。

fetch('http://xxx.xxx.com/uploads/file/xxx.doc', {
  method: 'get',
  headers: {
    'Access-Control-Allow-Origin': '*'
  },
  credentials: 'include'
}).then(res => {
  res.blob().then(blob => {
    const fileName = 'example.doc';
    const href = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = href;
    link.download = fileName;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
    URL.revokeObjectURL(href);
  });
});

实例演示

<template>
  <div class="file-download">
    <Button @click="downloadFile">Download File</Button>
  </div>
</template>

<script>
import { Button } from 'ant-design-vue';

export default {
  name: 'FileDownload',
  components: {Button},
  methods: {
    downloadFile() {
      fetch('http://xxx.xxx.com/uploads/file/xxx.doc', {
        method: 'get',
        headers: {
          'Access-Control-Allow-Origin': '*'
        },
        credentials: 'include'
      }).then(res => {
        res.blob().then(blob => {
          const fileName = 'example.doc';
          const href = URL.createObjectURL(blob);
          const link = document.createElement('a');
          link.href = href;
          link.download = fileName;
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
          URL.revokeObjectURL(href);
        });
      });
    }
  }
}
</script>

以上是vue如何根据url下载非同源文件的两种方法,你可以根据实际情况选择其中一种适合自己的方法来进行文件下载。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue如何根据url下载非同源文件 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue中的reactive函数操作代码

    下面是Vue中的reactive函数操作的完整攻略。 1. 简介 在Vue3中,我们可以使用reactive函数将一个普通对象包装成响应式对象。 import { reactive } from ‘vue’ const state = reactive({ count: 0 }) 上述代码中,我们使用reactive函数将一个对象包装成响应式对象,并将其赋值…

    Vue 2023年5月28日
    00
  • 深入了解Vue组件七种通信方式

    让我来为您详细讲解“深入了解Vue组件七种通信方式”的完整攻略。 1. 父子组件通信 父子组件是指在Vue组件树结构中,父级组件通过props将数据传递给子组件,子组件通过$emit触发事件来通知父组件。 父组件中定义: <template> <child-component :msg="parentMsg" @upda…

    Vue 2023年5月27日
    00
  • Vue的三种路由模式总结

    下面我来详细讲解一下“Vue的三种路由模式总结”: Vue的三种路由模式总结 Vue是一个非常流行的JavaScript框架,它提供了非常强大的路由功能,可以方便地实现单页应用程序。Vue的路由功能有三种不同的模式,分别是哈希模式、历史模式和抽象模式。下面我们将分别介绍这三种模式。 哈希模式 哈希模式是Vue的默认路由模式。使用哈希模式时,在URL中会添加一…

    Vue 2023年5月28日
    00
  • vue如何向后台传递日期

    下面我将向你详细讲解“vue如何向后台传递日期”的完整攻略。 步骤一:获取日期并格式化 为了准确地向后台传递日期,第一步是要获取日期并将其格式化。在 Vue 组件中,我们可以使用 moment.js 库来解决这个问题。这里需要安装 moment.js 库,可以使用以下命令: npm install moment –save 然后,我们在 Vue 组件中使用…

    Vue 2023年5月28日
    00
  • vue终极性能优化方案(解决首页加载慢问题)

    我来为您讲解一下“Vue终极性能优化方案(解决首页加载慢问题)”的完整攻略。 首页加载慢问题 在开发Vue项目时,有时候我们会遇到首页加载慢的问题,这是因为我们的网页存在大量的CSS和JS文件,导致浏览器需要下载很多文件才能显示页面。为了解决这个问题,我们可以从多个方面入手进行优化。 代码分割 代码分割是一种常用的优化手段,可以将应用程序分成小块,只加载当前…

    Vue 2023年5月27日
    00
  • 代替Vue Cli的全新脚手架工具create vue示例解析

    下面我将详细讲解使用新的脚手架工具 create vue 来搭建 Vue 项目的攻略。 准备工作 首先,需要安装最新版本的 Node.js 和 npm。 创建一个新的 Vue 项目需要使用 create vue 命令,因此我们需要全局安装 create vue。 npm install -g create-vue-app 安装完成后,我们就可以使用 crea…

    Vue 2023年5月28日
    00
  • vue3如何实现PDF文件在线预览功能

    Vue 3是基于前端开发框架Vue.js的最新版本,其具有更强大的响应式系统和优化后的编译器,使得开发体验更加简单、高效。本文将详细讲解如何使用Vue 3实现PDF文件在线预览功能的完整攻略。 步骤1 安装pdf.js PDF.js是一个用于在Web平台上显示PDF文档的开源项目,它基于HTML5 Canvas技术,可以解析PDF文档并将其转换为可供浏览器渲…

    Vue 2023年5月28日
    00
  • vue router-link传参以及参数的使用实例

    下面我将为您详细讲解“Vue Router-Link 传参以及参数的使用”。 什么是 Vue Router-Link? Vue Router-Link 是 Vue.js 的一个路由组件,可以让你在 SPA(Single Page Application 单页应用程序)中实现页面跳转和参数传递。 如何使用 Vue Router-Link 传参? 使用 Vue …

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部