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

yizhihongxing

我可以给你详细讲解一下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动态组件与异步组件实例详解

    Vue动态组件与异步组件实例详解 在 Vue 中,可以使用动态组件和异步组件实现按需加载组件,从而提高应用的性能。下面我们详细讲解 Vue 动态组件与异步组件。 动态组件 动态组件是一种将组件挂载到动态绑定的组件上的方式。可以在同一个挂载点上动态地切换不同的组件。 示例1 首先我们需要在 Vue 上下文中注册两个组件:Home 和 User。 // Home…

    Vue 2023年5月27日
    00
  • vue使用pdf.js预览pdf文件的方法

    下面是“Vue使用PDF.js预览PDF文件的方法”的完整攻略。 步骤一:安装PDF.js库 首先,我们需要在我们的Vue项目中安装pdfjs-dist依赖: npm install pdfjs-dist –save 步骤二:加载PDF.js文件 在我们的Vue组件中,加载PDF.js文件: <template> <div> &lt…

    Vue 2023年5月28日
    00
  • Vue3组件库框架搭建example环境的详细教程

    下面我为您详细讲解“Vue3组件库框架搭建example环境的详细教程”。 什么是Vue3组件库框架搭建example环境? Vue3组件库框架搭建example环境是为了方便开发人员在开发自己的组件库时,能够快速构建一个可用的示例环境来测试和展示自己的组件库。 在Vue3框架下,常用的组件库框架包括Element Plus、Ant Design Vue等,…

    Vue 2023年5月27日
    00
  • 一份超级详细的Vue-cli3.0使用教程【推荐】

    一份超级详细的Vue-cli3.0使用教程 简介 Vue-cli3.0是Vue.js 官方提供的一个基于 webpack4 和 Webpack-dev-server 的脚手架工具,用于快速构建vue项目开发环境。本教程将为您带来Vue-cli3.0的完整使用攻略,从安装到构建一个简单的Vue项目,让你轻松掌握Vue-cli3.0的使用方法。 安装Vue-cl…

    Vue 2023年5月28日
    00
  • 在vue项目中 实现定义全局变量 全局函数操作

    在Vue项目中定义全局变量和全局函数操作可以使用Vue实例的prototype属性来实现,具体的实现步骤如下: 1. 创建全局变量 在Vue项目中定义全局变量可以使用Vue实例的prototype属性,在生命周期created方法中定义一个全局变量,示例代码如下: // 定义一个全局变量 Vue.prototype.$globalVariable = ‘gl…

    Vue 2023年5月28日
    00
  • VUE中的自定义指令钩子函数讲解

    对于Vue中的自定义指令,钩子函数是其中一个重要的组成部分,它可以让我们在指令的生命周期中进行一些特定的操作。Vue提供了一组常用的钩子函数可以用来响应指令生命周期内的不同阶段;同时我们也可以自定义指令钩子函数来实现特定的需求。 下面我们来看一下Vue中自定义指令的钩子函数: bind钩子函数 bind钩子函数在指令绑定到元素上时被调用,只会调用一次。通常可…

    Vue 2023年5月28日
    00
  • vue 3.0 vue.config.js文件常用配置方式

    下面就是关于“vue 3.0 vue.config.js文件常用配置方式”的完整攻略。 1. vue.config.js文件是什么 在Vue 3.0及以上版本中,通常需要通过vue.config.js文件进行项目的相关配置,例如webpack、开发服务器、路径等等。vue.config.js是一个可选的配置文件,如果存在,那么它会被默认加载,在vue-cli…

    Vue 2023年5月28日
    00
  • 5个可以加速开发的VueUse函数库(小结)

    让我详细讲解一下“5个可以加速开发的VueUse函数库(小结)”的完整攻略。 标题 首先,需要明确的是,该篇文章的标题应该使用 H1 标题: # 5个可以加速开发的VueUse函数库(小结) 简介 接着,需要写一段文章的简介,简要介绍该篇文章的主要内容,可以参考以下示例: 本文将介绍5个可以加速开发的VueUse函数库,这些函数库大多数都是轻量级的,但是可以…

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