vue使用ntko控件完成word上传、html上传

本文介绍了在Vue项目中集成NTKO控件,用于实现Word和HTML文档的上传功能。在实际操作中遇到诸如父组件状态更新不响应、后台接收文件问题以及弹框被控件覆盖等坑,并提供了相应的解决方案,包括使用Object.assign处理对象监听、调整Struts1配置以及利用iframe解决控件覆盖问题。
摘要由CSDN通过智能技术生成

前言

新项目前端用的是vue框架,后端用的是struts1框架(没错,就是struts1)。客户要求增加word上传的功能,这个功能在以前老项目里面已经存在,只需将jsp改造成vue。实际上,在改造过程中遇到了很多问题,记录下。

步骤

  1. ntko需要传递一些参数,我把它们写在props上,父组件使用时只需传递这些参数就可以了。
    props: {
   
      settings: {
   
        docId: '',  // 文档id,同时是文档名称
        docFolder: '',  // 文件夹名称,
        fileExt: '.doc', // 文件扩展名:默认为.doc,如果你只上传word文档,这个不用改
        width: '700',   // 控件宽度
        height: '500'  // 控件高度
      }
    }
  1. ntko是activex控件来着,使用方式如下:
<!--
xxxx:根据自己的情况填写
:width:绑定宽度
:height:绑定高度
-->
<object id='TANGER_OCX' classid='clsid:xxxxxxxxxxxx'
        codebase='../../../../public/lib/ntko-office/OfficeControl.cab#version=5,0,4,1'
        :width='settings.width' :height='settings.height'>
  <param name='TitleBar' value='0'>
  <param name="NoExpireKey" value="xxxxxxxxxxxxxxxxxxxxx">
  <param name="MakerCaption" value="xxxxxxxxxxxxxxxxxxxxx">
  <param name="MakerKey" value="xxxxxxxxxxxxxxxxxxxxx">
  <param name="ProductCaption" value="xxxxxxxxxxxxxxxxxxxxx">
  <param name="ProductKey" value="xxxxxxxxxxxxxxxxxxxxx">
  <span style="color: red;display: inline-block">当前浏览器不能装载文档控件,
    请在检查浏览器的选项中检查浏览器的安全设置。</span>
</object>
  1. ntko的操作api需要一个ntko对象,所以需要一个属性存储ntko对象
    data() {
   
      return {
   
        officeObj: null  // ntko对象
      }
    }
  1. 初始化
      /**
       * 初始化文档控件,主要做以下操作:
       * 1. 封装ntko对象
       * 2. 判断docId是否为空,如果为空,则创建一个新的word文档;
       *     否则,根据docId去下载文档并显示出来
       */
      initDoc(){
   
        // 获取控件对象
        this.officeObj = document.getElementById("TANGER_OCX")

        if (this.officeObj == null) {
   
          return
        }
        if (this.settings.docId == null || this.settings.docId === '') {
   
          // 打开一个空白文档
          this.officeObj.CreateNew('Word.Document')
        } else {
   
          // 下载文档
          this.httpDownload()
        }
      }
  1. 下载word文档:注意,这里下载的都是word文档,下载其他文档需要另作处理
      /**
       * 下载office控件
       */
      httpDownload() {
   
        let fileName = this.settings.docId + '.doc'

        let fileUrl = "/downloadOfficeOcx.do?fileName=" + fileName + "&docFolder=" + this.settings.docFolder
        return this.officeObj.OpenFromURL(fileUrl, false)
      }
  1. 上传word文档
      /**
       * 上传word文档
       */
      httpUpload() {
   
        let myUrl = "/uploadOfficeOcx.do"
        let fileName = this.settings.docId + '.doc'

        let params = "docFolder=" + this.settings.docFolder

        /**
         * officeFile:文件域的id,类似<input type=file id=officeFile 中的id
         * params:参数
         * 0:与控件一起提交的表单id,也可以是form的序列号,这里应该是0
         */
        return this.officeObj.saveToURL(myUrl, "officeFile", params, fileName, 0)
      }
  1. 上传html文档
      /**
       * doc转HTML:会先上传word文档,然后再转换为html,再上传html文档
       */
      saveDocAsHTML()  {
   
        //上传office文件
        this.httpUpload()
        
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值