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如何查找数组中符合条件的对象

    首先,我们可以通过 Array.prototype.find() 方法来查找数组中符合条件的对象,并返回第一个符合条件的对象。 例如,我们有以下数组对象: let users = [ { name: ‘Alice’, age: 20 }, { name: ‘Bob’, age: 25 }, { name: ‘Charlie’, age: 30 } ]; 如果…

    Vue 2023年5月28日
    00
  • 3分钟了解vue数据劫持的原理实现

    以下是 “3分钟了解vue数据劫持的原理实现”的完整攻略: 什么是vue数据劫持 Vue.js是一个MVVM框架,数据是驱动视图的核心,所以数据的变化非常重要。vue数据劫持是vue.js用来监听数据变化并作出响应的核心机制。 实现原理 Vue.js通过数据劫持的方式来监听数据变化并作出响应。数据劫持主要通过Object.defineProperty()这个…

    Vue 2023年5月28日
    00
  • vue如何实现二进制流文件导出excel

    下面是对”Vue如何实现二进制流文件导出excel”的完整攻略。 1. 背景 在实际开发中,我们经常会遇到需要将数据导出为Excel文件的需求,这个时候我们可以使用前端导出Excel文件的方式来实现。Vue通过其强大的功能,提供了较为便捷的二进制流文件导出Excel的方法。 2. 实现步骤 步骤一:安装相关依赖 首先需要安装以下两个依赖: file-save…

    Vue 2023年5月27日
    00
  • vue接口请求加密实例

    我来详细讲解一下“Vue接口请求加密实例”的完整攻略。整个过程可以分为以下几个步骤: 生成密钥 加密请求参数 发送加密后的请求 服务器验证签名并进行解密 下面我会就每一个步骤进行详细讲解,并给出两个示例说明。 步骤一:生成密钥 在前端与后端约定好密钥算法后,前端需要先生成密钥。这里我们以sha256算法为例: const crypto = require(‘…

    Vue 2023年5月28日
    00
  • Vue 动画效果、过渡效果的示例代码

    下面是详细讲解Vue动画效果、过渡效果的示例代码的攻略。 准备工作 在开始讲解之前,需要保证已经安装好Vue.js框架。另外,为了方便案例演示,我们需要借助Vue的官方库vue-router完成路由跳转。 首先,我们需要创建Vue项目,在项目中安装vue-router: // 创建Vue项目 vue create my-project // 安装vue-ro…

    Vue 2023年5月27日
    00
  • NodeJS落地WebSocket实践前端架构师破局技术

    让我详细讲解一下“NodeJS落地WebSocket实践前端架构师破局技术”的完整攻略。 什么是WebSocket WebSocket是一种基于TCP协议的新型网络通信协议,它可以实现客户端和服务器端的双向通信,可以使得我们在Web应用中实现实时交互。WebSokcet协议比HTTP协议更加高效,具有延迟小、传输快、实时性好等优点,特别适合于实时通信和大数据…

    Vue 2023年5月28日
    00
  • Vue关于对象直接赋值的坑及解决

    Vue关于对象直接赋值的坑及解决 在Vue中,通过对象直接赋值的方式对一个对象进行修改,会引起一些潜在的问题。本攻略将详细讲解这个问题及其解决方案。 问题描述 假设有一个对象 obj: let obj = { name: ‘张三’, age: 20 } 现在在Vue组件中,我们使用这个对象: <template> <div> <…

    Vue 2023年5月28日
    00
  • 浅谈vuex之mutation和action的基本使用

    概述 Vuex是状态管理库,它可以让我们更好地管理应用程序状态。Vuex提供了许多有用的功能,其中最常使用的功能是mutation和action。mutation负责更改vuex的状态,而action则用于组织和分发mutation。本篇文章将会简单介绍mutation和action的基本使用。 Mutation mutation是用来更改vuex状态的函数…

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