java+vue实现富文本转word下载到本地

java

    @ApiOperation("word导出")
    @RequestMapping(value = "/exportWord")
    public void exprotWord(@RequestParam String id, HttpServletRequest request,
                           HttpServletResponse response) {
        // 数据库查富文本数据
        String content = this.richTextService.getById(id).getContent();
        String richText = "" + content + "";
        try {
            //设置编码
            byte b[] = richText.getBytes("GBK");
            ByteArrayInputStream bais = new ByteArrayInputStream(b);
            POIFSFileSystem poifs = new POIFSFileSystem();
            // ##############下面这两个不能删掉
            DirectoryEntry directory = poifs.getRoot();
            DocumentEntry documentEntry = directory.createDocument("WordDocument", bais);
            //################这两个不能删掉
            //输出文件
            String name = "测试";
            response.reset();
            response.setHeader("Content-Disposition",
                    "attachment;filename=" +
                            new String(name.getBytes("GB2312"), "iso-8859-1") + ".doc");
            response.setContentType("application/msword");
            OutputStream ostream = response.getOutputStream();
            //输出到本地文件的话,new一个文件流
            // FileOutputStream ostream = new FileOutputStream("E:\\桌面\\测试.doc");
            poifs.writeFilesystem(ostream);
            bais.close();
            ostream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

js实现下载word

/*
export function downFile(url,parameter){
  return axios({
    url: url,
    params: parameter,
    method:'get' ,
    responseType: 'blob'
  })
}
 */
handleSubmit(e) {
        var fileName = "群体性事件"
        var param = {"id":"2"}
        //downFile就是封装了axios
        downFile(this.url.exportWord, param).then((res) => {
          if (typeof window.navigator.msSaveBlob !== 'undefined') {
            window.navigator.msSaveBlob(new Blob([res], {
            type: 'application/msword'
          }), fileName + '.doc')
          } else {
            let url = window.URL.createObjectURL(new Blob([res], {
              type: 'application/msword'
            }))
            let link = document.createElement('a')
            link.style.display = 'none'
            link.href = url
            //这是下载的文件名
            link.setAttribute('download', fileName + '.doc')
            document.body.appendChild(link)
            link.click()
            document.body.removeChild(link); //下载完成移除元素
            window.URL.revokeObjectURL(url); //释放掉blob对象
          }
        }).catch((err) => {
          console.log(err)
        })
      }

你可能感兴趣的:(前端,java,富文本转word,blob,download,java,vue)