vue關(guān)于下載文件常用的幾種方式
vue下載文件常用方式
直接打開
直接打開是指我們直接使用window.open(URL)的方法
- 優(yōu)點(diǎn):簡(jiǎn)單操作
- 缺點(diǎn):沒辦法攜帶token
我們可以自己封裝一個(gè)方法
比如如下:
import axios from "axios"
import * as auth from '@/utils/auth.js'
let ajax = axios.create({
? ? baseURL: process.env.VUE_APP_BASE_API,
? ? timeout: 100000
});
ajax.interceptors.request.use(config => {
? ? ? ? config.headers = {
? ? ? ? ? ? Authorization: auth.getToken(),
? ? ? ? ? ? // OrgId: auth.getUser().orgId,
? ? ? ? ? ? // UserId: auth.getUser().id,
? ? ? ? }
? ? ? ? return config
? ? },
? ? err => {
? ? ? ? return Promise.reject(err)
? ? })
let downloadFile = async (url, formData, options) => {
? ? await ajax.post(url, formData, {responseType: 'arraybuffer'}).then(resp => download(resp, options))
}
let getFile = async (url, options) => {
? ? await ajax.get(url, {responseType: 'blob'}).then(resp => download(resp, options))
}
let download = (resp, options) => {
? ? let blob = new Blob([resp.data], {type: options.fileType ? options.fileType : 'application/octet-binary'})
? ? //創(chuàng)建下載的鏈接
? ? let href = window.URL.createObjectURL(blob)
? ? downloadBlob(href, options.fileName)
}
let downloadBlob = (blobUrl, fileName, revokeObjectURL) => {
? ? let downloadElement = document.createElement('a')
? ? downloadElement.href = blobUrl
? ? //下載后文件名
? ? downloadElement.download = fileName
? ? document.body.appendChild(downloadElement)
? ? //點(diǎn)擊下載
? ? downloadElement.click()
? ? //下載完成移除元素
? ? document.body.removeChild(downloadElement)
? ? if (revokeObjectURL == null || revokeObjectURL) {
? ? ? ? //釋放掉blob對(duì)象
? ? ? ? window.URL.revokeObjectURL(blobUrl)
? ? }
}
let getDownloadFileUrl = async (url, fileType) => {
? ? let blob
? ? await ajax.get(url, {responseType: 'blob'}).then(resp => {
? ? ? ? blob = new Blob([resp.data], {type: fileType ? fileType : 'application/octet-binary'});
? ? })
? ? return window.URL.createObjectURL(blob);
}
let getDownloadFileUrlByPost = async (url, data, fileType) => {
? ? let blob
? ? await ajax.post(url, data, {responseType: 'blob'}).then(resp => {
? ? ? ? blob = new Blob([resp.data], {type: fileType ? fileType : 'application/octet-binary'});
? ? })
? ? return window.URL.createObjectURL(blob);
}
let getDownloadFileBlob = async (url, fileType) => {
? ? let blob
? ? await ajax.get(url, {responseType: 'blob'}).then(resp => {
? ? ? ? blob = new Blob([resp.data], {type: fileType ? fileType : 'application/octet-binary'});
? ? })
? ? return blob;
}
export default {
? ? ajax,
? ? downloadFile,
? ? getFile,
? ? getDownloadFileUrl,
? ? getDownloadFileUrlByPost,
? ? getDownloadFileBlob,
? ? downloadBlob
}然后在我們調(diào)用的那個(gè)頁(yè)面中直接引入使用就好啦
//先引用
import ajax from '../../utils/ajax.js'
//使用
ajax.downloadFile('URL',null,{下載的文件名稱})這樣看是不是就挺容易的
vue常用的命令
創(chuàng)建vue項(xiàng)目常用命令
如果vue項(xiàng)目出錯(cuò)了你可以把依賴刪掉,清理一下緩存在重新安裝
清理緩存 npm cache clean --force
第一步,創(chuàng)建淘寶鏡像,安裝npm鏡像(如果已經(jīng)安裝的就直接第二步就可以了)
npm install -g cnpm --registry=https://registry.npm.taobao.org
第二步, 全局安裝vue-vli
npm install --g vue-cli
第三步, 創(chuàng)建一個(gè)vue項(xiàng)目
vue init webpack 項(xiàng)目名
vue項(xiàng)目部署
npm install
啟動(dòng)項(xiàng)目
npm run dev/npm run serve
1、安裝element_ui
npm i element-ui -S
安裝成功后在main.js中到導(dǎo)入element-ui,并使用
? ? import ElementUI from 'element-ui'; ? ? import 'element-ui/lib/theme-chalk/index.css'; ? ? Vue.use(ElementUI);
2、安裝vue_router
npm install vue-router --save?
安裝完成如果沒有文件夾router(一般都有vue2.0下需要自己選擇安裝,vue3.0創(chuàng)建有)我們直接創(chuàng)建index.js文件。文件放入以下配置
import Vue from 'vue'
import VueRouter from 'vue-router';
Vue.use(VueRouter);?
import XXX "../src/components/xxx";
??
const routes = [
? {
? ? path:'/'
? ? component: XXX
? },?
]
?
const router = new VueRouter({
? routes
})
?
export default router要在main.js中應(yīng)用router.js文件。我們需要在中放入router
import router from "../router";
?? ?
new Vue({
? router,
? el: '#app',
? components: { App },
? template: '<App/>'
})3、 安裝axios組件,安裝命令如下:
npm install --save vue-axios ?
在main.js文件下引入如下代碼:
import axios from 'axios' import VueAxios from 'vue-axios' Vue.use(VueAxios, axios)
總結(jié)
1.安裝vue-cli
npm install --global vue-cli
2.創(chuàng)建一個(gè)基于 webpack 模板的新項(xiàng)目
vue init webpack 項(xiàng)目名稱
3.運(yùn)行:npm run dev
4.安裝依賴:cd 項(xiàng)目名稱 npm install
5.安裝vue-resource插件(通過XMLHttpRequest或JSONP發(fā)起請(qǐng)求并處理響應(yīng) //get post請(qǐng)求):npm install vue-resource --save
6.安裝路由插件:
npm install vue-router --save
7.安裝element-ui:
npm i element-ui -S(安裝好之后要記得在main.js中引入)
8.安裝axios npm install axios --save
9.安裝Echarts npm install echarts --save
10.如果想要終止終端(cmd)正在運(yùn)行的命令,則ctrl +c
11.安裝指定版本jquery
npm i jquery@版本號(hào)
12.若項(xiàng)目中node_modules文件被刪除,使用 npm install 即能把package.json中的dependencies中所有依賴項(xiàng)都下載回來
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
VUE3中引入.env下的環(huán)境變量,顯示process未定義問題
這篇文章主要介紹了VUE3中引入.env下的環(huán)境變量,顯示process未定義問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
Vue3實(shí)現(xiàn)表單輸入的雙向綁定的示例代碼
Vue.js 是一個(gè)漸進(jìn)式的JavaScript框架,廣泛用于構(gòu)建交互式用戶界面,在 Vue 中,雙向綁定是一項(xiàng)非常核心的概念,尤其是在處理表單輸入時(shí),它使得數(shù)據(jù)和用戶界面之間的互動(dòng)變得簡(jiǎn)單又高效,在本篇博客中,我們將深入探討如何在 Vue 3 中實(shí)現(xiàn)表單輸入的雙向綁定2025-01-01
使用vscode格式化文檔無效的解決辦法(vue代碼格式化文檔無效)
這篇文章主要給大家介紹了關(guān)于使用vscode格式化文檔無效的解決辦法,也就是vue代碼格式化文檔無效,這是最近突然遇到的一個(gè)問題,這里給大家介紹一下解決的辦法,需要的朋友可以參考下2023-08-08
在Vue中實(shí)現(xiàn)不刷新的iframe頁(yè)面的方案
在Vue項(xiàng)目中,我們可能會(huì)遇到這樣的需求:需要在應(yīng)用中嵌入iframe頁(yè)面,并且要求在路由切換的過程中,iframe的內(nèi)容不會(huì)被刷新,本文將介紹如何解決這個(gè)問題,并給出具體的實(shí)現(xiàn)方案,需要的朋友可以參考下2025-01-01
vue 2.5.1 源碼學(xué)習(xí) 之Vue.extend 和 data的合并策略
這篇文章主要介紹了Vue.extend 和 data的合并策略 ,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
Vue+ElementUI容器無法鋪滿網(wǎng)頁(yè)的問題解決
這篇文章主要介紹了Vue+ElementUI容器無法鋪滿網(wǎng)頁(yè)的問題解決,文章通過圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-08-08

