Vue项目通过读取本地文件内容来显示内容

15 篇文章 0 订阅

需求:

公司项目需要在登陆之前,实现客户自定义项目标题。由于还未登陆,所以肯定无法通过后端管理系统配置。
第一个想到的办法是通过读取本地文件内容,来显示标题内容。
客户需要求改标题时,直接修改本地文件内容即可。


实现

读取本地文件的思路有两种,第一种是利用XMLHttpRequest,第二种是利用input的type=file将文件先上传,再读取。

第一种:

利用XMLHttpRequest对本地文件进行读取操作,值得注意的是,HTML文档的格式要与流中的读取格式设置一致, 代码如下:

methods: {
  readFile(filePath) {
    // 创建一个新的xhr对象
    let xhr = null
    if (window.XMLHttpRequest) {
      xhr = new XMLHttpRequest()
    } else {
      // eslint-disable-next-line
      xhr = new ActiveXObject('Microsoft.XMLHTTP')
    }
    const okStatus = document.location.protocol === 'file' ? 0 : 200
    xhr.open('GET', filePath, false)
    xhr.overrideMimeType('text/html;charset=utf-8')
    xhr.send(null)
    return xhr.status === okStatus ? xhr.responseText : null
  },
}

首先创建一个读取文件内容的函数readFile,通过XMLHttpRequest对象,读取指定路径中的文件,格式指定为text/html,并返回内容。
然后直接在login组件的created钩子函数中,调用并读取文件内容,赋值给需要显示的标题title属性。

  created() {
    this.getList()
    this.title = this.readFile('../../../static/title.txt')
    console.log(this.title)
  },

本次项目需求就是使用此方案解决。


第二种:

上传文件利用input标签,然后使用FileReader对象,h5提供的异步api,可以读取文件中的数据。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <span>点击上传:</span> <input type="file" id="files1" onchange="uploadFile1()">
    <br>
    <span>点击上传2:</span> <input type="file" id="files2" onchange="uploadFile2(event)">
    <script>
      function uploadFile1() {
        const selectedFile = document.getElementById('files1').files[0]
        // 读取文件名
        const name = selectedFile.name
        // 读取文件大小
        const size = selectedFile.size
        // FileReader对象,h5提供的异步api,可以读取文件中的数据。
        const reader = new FileReader()
        // readAsText是个异步操作,只有等到onload时才能显示数据。
        reader.readAsText(selectedFile)
        reader.onload = function () {
                //当读取完成后回调这个函数,然后此时文件的内容存储到了result中,直接操作即可
                console.log(this.result);
        }
      }
      function uploadFile2(e) {
        const selectedFile = e.target.files[0]
        const reader = new FileReader()
        // 文件内容载入完毕之后的回调。
        reader.onload = function(e) {
          console.log(e.target.result)
        }
        reader.readAsText(selectedFile)
      }
    </script>
  </body>
</html>

  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值