欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue中實(shí)現(xiàn)支持txt,docx,xlsx,mp4格式文件預(yù)覽功能(純前端)

 更新時(shí)間:2023年11月27日 10:12:23   作者:朱顏辭鏡、  
對(duì)于Vue你可以實(shí)現(xiàn)文件的預(yù)覽功能,這篇文章主要給大家介紹了關(guān)于vue中實(shí)現(xiàn)支持txt,docx,xlsx,mp4格式文件預(yù)覽功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在平常的工作當(dāng)中,已經(jīng)會(huì)遇到文件上傳后需要預(yù)覽的功能,比如docx,doc,xls,xlsx,ppt,pdf,txt,圖片,視頻等格式的文件,其實(shí)也可以讓后端人員寫接口解析,本著不想麻煩別人的心態(tài),能自己解決的絕不麻煩別人,這里簡單介紹txt,docx,xlsx,mp4文件預(yù)覽。

一、txt文本預(yù)覽

1.在vue項(xiàng)目中安裝axios     npm i axios -S  或 yarn add axios 

2. 準(zhǔn)備一個(gè)txt文件,里面隨便輸入些內(nèi)容

3. 使用axios來請(qǐng)求該txt文件

頁面完整代碼如下

<template>
    <div class="txt" style="white-space: pre-wrap;">{{ textContent }}</div>
</template>
<script setup lang="ts">
    import { ref } from 'vue';
    import axios from 'axios';
 
    const textContent = ref<any>("");
    //這里可以是http地址,也可以是本地地址
    const url = "http://10.3.1.171:7878/123.txt";
    axios.get(url,{
        responseType:"text",
    }).then(res=>{
        textContent.value = res.data;
    })
 
</script>

 結(jié)果如下

發(fā)現(xiàn)他可以成功的拿到文本內(nèi)容,但是我們文本里不僅有數(shù)字,英文,還有中文

4.這個(gè)時(shí)候我們往txt里寫入一些中文

再來看下結(jié)果

喔嚯,這個(gè)時(shí)候出現(xiàn)了亂碼,為什么會(huì)出現(xiàn)亂碼呢???

原因很簡單,axios用的默認(rèn)編碼為UTF-8,而txt的默認(rèn)編碼為ANSI,也就是GBK,明白了錯(cuò)誤的原因就好辦了,解決方法有兩種

1.直接修改txt的編碼為UTF-8,修改方式參考:怎么修改txt文件默認(rèn)的編碼格式?_百度知道

 修改完成后結(jié)果如下

   發(fā)現(xiàn)結(jié)果是我們想要的,你以為到這里就一切都結(jié)束了么?NO,NO,NO,這種方式不推薦,我們不可能每個(gè)文件都去設(shè)計(jì)編碼,我們追求的就是要完美,永不加班...硬著頭皮繼續(xù)往下干,懷著一顆匠心精神的我必須打磨好自己的藝術(shù)品,哈哈,于是就有了第二種解決方案

2.在axios上做返回值的編碼轉(zhuǎn)換

看了axios的文檔發(fā)現(xiàn)一個(gè)transformResponse字段配置

我們就可以使用這個(gè)配置項(xiàng)來對(duì)返回的數(shù)據(jù)做轉(zhuǎn)碼,在處理之前先將

responseType設(shè)置為blob,我們改用流的方式來實(shí)現(xiàn),下面是完整代碼

<template>
    <div><div class="txt" style="white-space: pre-wrap;">{{ textContent }}</div></div>
</template>
<script setup lang="ts">
    import { ref } from 'vue';
    import axios from 'axios';
    const textContent = ref<any>("");
    const url = "http://10.3.1.171:7878/123.txt";
    const transformData = (data:any)=>{
        return new Promise((resolve)=>{
            let reader = new FileReader();
            reader.readAsText(data,'GBK');
            reader.onload = ()=>{
                resolve(reader.result)
            }
        })
    }
    axios.get(url,{
        responseType:"blob",
        transformResponse: [
            async function (data) {
                return await transformData(data);
            },
        ],
    }).then(res=>{
        res.data.then((data:any)=>{
            textContent.value = data;
        })
    })
</script>

這里使用的promise來返回fileReader讀取到的數(shù)據(jù),在fileReader中設(shè)置編碼為GBK,這樣編碼  就同txt保持一致了,接下來

我們?cè)賮碇匦聞?chuàng)建一個(gè)txt文件

然后再來測(cè)試一下,結(jié)果如下

結(jié)果就是我們最終想要的了,到此txt的預(yù)覽就完成了,這里只是演示了如何加載txt文本,可以將其做成一個(gè)組件,便于以后使用

二、docx文件預(yù)覽

docx文件的預(yù)覽我們借用第三方插件@vue-office/docx 來處理 ,這里我們直接做成一個(gè)組件,子組件提供一個(gè)url即可,代碼如下

  先使用yarn或npm安裝@vue-office/docx 

<!--  docx文檔查看器 -->
<template>
    <teleport to="body">
        <div  class="sx-docx-wrapper change-y-translate">
            <vue-office-docx :src="url" style="height: 100%; margin: 0; padding: 0"  @rendered="rendered"/>
            <span class="icon-close" @click="emits('close')"></span>
        </div>
    </teleport>
</template>
<script  lang="ts" setup>
    //引入VueOfficeDocx組件
    import VueOfficeDocx from "@vue-office/docx";
    //引入相關(guān)樣式
    import "@vue-office/docx/lib/index.css";
    const props = defineProps({ 
        url:{
            type:String,
            default:""
        }
    })
    const emits = defineEmits<{
        (e:"close"):void
    }>()
    const rendered = ()=>{
        console.log("渲染完成");
    }
</script>
<style lang="scss" scoped>
    .sx-docx-wrapper{
        position:fixed;
        width:100%;
        height:100%;
        background:rgba(0,0,0,0.6);
        overflow:hidden;
        top:0;
        left:0;
        z-index:9999;
        display:flex;
        justify-content:center;
        align-items:center;
        .icon-close{
            position:absolute;
            top:10px;
            right:20px;
            width:30px;
            height:30px;
            background:url("/img/close.png") center no-repeat;
            background-size:100%;
            cursor:pointer;
        }
    }
</style>   

實(shí)現(xiàn)效果如下

三、xlsx文件預(yù)覽

實(shí)現(xiàn)的方法跟docx差不多,只是插件不一樣

1、 npm i @vue-office/excel  或  yarn  add @vue-office/excel

2、代碼封裝如下

<!--  excel文檔查看器 -->
<template>
    <teleport to="body">
        <div  class="sx-excel-wrapper change-y-translate">
            <vue-office-excel
                :src="url"
                @rendered="renderedHandler"
                @error="errorHandler"
                style="width:80%;"
            />
            <span class="icon-close" @click="emits('close')"></span>
        </div>
    </teleport>
</template>
<script  lang="ts" setup>
 
    //引入VueOfficeExcel組件
    import VueOfficeExcel from "@vue-office/excel";
    //引入相關(guān)樣式
    import "@vue-office/excel/lib/index.css";
 
    const props = defineProps({ 
        url:{
            type:String,
            default:""
        }
    })
 
 
    const emits = defineEmits<{
        (e:"close"):void
    }>()
 
    const renderedHandler = ()=>{
        console.log("渲染完成");
    }
 
    const errorHandler = ()=>{
        console.log("渲染失敗");
    }
   
    
</script>
<style lang="scss" scoped>
    .sx-excel-wrapper{
        position:fixed;
        width:100%;
        height:100%;
        background:rgba(0,0,0,0.6);
        overflow:hidden;
        top:0;
        left:0;
        z-index:9999;
        display:flex;
        justify-content:center;
        align-items:center;
 
        .icon-close{
            position:absolute;
            top:10px;
            right:20px;
            width:30px;
            height:30px;
            background:url("/img/close.png") center no-repeat;
            background-size:100%;
            cursor:pointer;
        }
    }
</style>   

  運(yùn)行效果如下

四、mp4文件預(yù)覽

mp4預(yù)覽我們借用西瓜視頻插件來實(shí)現(xiàn)

1、安裝xgplayer  yarn add xgplayer  或者 npm i xgplayer

2.封裝代碼如下

<!-- 西瓜視頻播放器插件 https://h5player.bytedance.com/guide/#%E5%AE%89%E8%A3%85 -->
<template>
    <teleport to="body">
        <div  class="sx-xgplayer-wrapper change-y-translate">
            <div class="video-section">
                <div id="video"></div>
                <span class="icon-close" @click="emits('close')"></span>
            </div>
        </div>
    </teleport>
</template>
<script  lang="ts" setup>
    import Player, { Events } from 'xgplayer'
    import 'xgplayer/dist/index.min.css';
    import { onMounted,onUnmounted } from 'vue';
 
    let player:any = null;
    const props = defineProps({ 
        url:{
            type:String,
            default:""
        }
    })
 
    const emits = defineEmits<{
        (e:"close"):void
    }>()
 
 
    onMounted(()=>{
        player = new Player({
            id: 'video',
            url: props.url,
            height: '100%',
            width: '100%',
            lang:'zh-cn'
        })
    })
 
    onUnmounted(()=>{
        player.destroy() // 銷毀播放器
        player = null // 將實(shí)例引用置空
    })
 
   
    
</script>
<style lang="scss" scoped>
    .sx-xgplayer-wrapper{
        position:fixed;
        width:100%;
        height:100%;
        background:rgba(0,0,0,0.6);
        overflow:hidden;
        top:0;
        left:0;
        z-index:9999;
        display:flex;
        justify-content:center;
        align-items:center;
 
        .video-section{
            width:1200px;
            height:660px;
            background:#000;
            padding:20px;
            position:relative;
            box-shadow: 0 1px 8px 1px #5c5c5c;
        }
 
        .icon-close{
            position:absolute;
            top:10px;
            right:10px;
            width:20px;
            height:20px;
            background:url("/img/close.png") center no-repeat;
            background-size:100%;
            cursor:pointer;
        }
    }
</style>   

 相關(guān)的配置項(xiàng)請(qǐng)自行參考西瓜開發(fā)文檔,文檔地址在代碼中喲?。?!

 來看看實(shí)現(xiàn)的效果吧

到這里,關(guān)于docx,xlsx,txt,mp4等預(yù)覽的功能實(shí)現(xiàn)完成啦,下班?。?!

總結(jié)

到此這篇關(guān)于vue中實(shí)現(xiàn)支持txt,docx,xlsx,mp4格式文件預(yù)覽功能(純前端)的文章就介紹到這了,更多相關(guān)vue支持txt,docx,xlsx,mp4文件預(yù)覽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue通信方式EventBus的實(shí)現(xiàn)代碼詳解

    vue通信方式EventBus的實(shí)現(xiàn)代碼詳解

    這篇文章主要介紹了vue通信方法EventBus的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • vue路由傳參頁面刷新參數(shù)丟失問題解決方案

    vue路由傳參頁面刷新參數(shù)丟失問題解決方案

    這篇文章主要介紹了vue路由傳參頁面刷新參數(shù)丟失問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • vue中實(shí)現(xiàn)Monaco Editor自定義提示功能

    vue中實(shí)現(xiàn)Monaco Editor自定義提示功能

    最近小編接到一個(gè)項(xiàng)目,需要在瀏覽器的ide中支持自定義提示功能,接下來通過本文給大家介紹在vue中實(shí)現(xiàn)Monaco Editor自定義提示功能,需要的朋友可以參考下
    2019-07-07
  • vue源碼入口文件分析(推薦)

    vue源碼入口文件分析(推薦)

    這篇文章主要介紹了vue源碼入口文件分析(推薦),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解Vue-axios 設(shè)置請(qǐng)求頭問題

    詳解Vue-axios 設(shè)置請(qǐng)求頭問題

    這篇文章主要介紹了Vue-axios 設(shè)置請(qǐng)求頭問題,文中給大家提到了axios設(shè)置請(qǐng)求頭內(nèi)容的方法,需要的朋友可以參考下
    2018-12-12
  • Elementui按鈕設(shè)置默認(rèn)選中狀態(tài)的實(shí)現(xiàn)過程

    Elementui按鈕設(shè)置默認(rèn)選中狀態(tài)的實(shí)現(xiàn)過程

    這篇文章主要給大家介紹了關(guān)于Elementui按鈕設(shè)置默認(rèn)選中狀態(tài)的實(shí)現(xiàn)過程,文中通過圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Elementui具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Vue項(xiàng)目中跨域問題解決方案

    Vue項(xiàng)目中跨域問題解決方案

    本文給大家介紹了vue項(xiàng)目中跨域問題的完美解決方案,通過更改header,使用http-proxy-middleware 代理解決(項(xiàng)目使用vue-cli腳手架搭建),具體內(nèi)容詳情大家跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-06-06
  • 詳解.vue文件中style標(biāo)簽的幾個(gè)標(biāo)識(shí)符

    詳解.vue文件中style標(biāo)簽的幾個(gè)標(biāo)識(shí)符

    這篇文章主要介紹了詳解.vue文件中style標(biāo)簽的幾個(gè)標(biāo)識(shí)符,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • 使用vue-element-admin框架從后端動(dòng)態(tài)獲取菜單功能的實(shí)現(xiàn)

    使用vue-element-admin框架從后端動(dòng)態(tài)獲取菜單功能的實(shí)現(xiàn)

    &#8203; vue-element-admin是一個(gè)純前端的框架,左側(cè)菜單是根據(jù)路由生成的。實(shí)際開發(fā)中經(jīng)常需要根據(jù)當(dāng)前登陸人員的信息從后端獲取菜單進(jìn)行展示,本文將詳細(xì)介紹如何實(shí)現(xiàn)該功能
    2021-04-04
  • 詳解vue express啟動(dòng)數(shù)據(jù)服務(wù)

    詳解vue express啟動(dòng)數(shù)據(jù)服務(wù)

    本篇文章主要介紹了vue express啟動(dòng)數(shù)據(jù)服務(wù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07

最新評(píng)論