vue项目不用vue-pdf还可以用iframe简单实现预览pdf

我的vue2项目安装了vue-pdf要报错,感觉是node版本的问题,我就找了其他的办法,使用iframe也可以简单时间pdf文件的预览,其中预览自带分页、下载、旋转、比例等功能,能够满足基本需求。
实现过程为,首先通过id从后端获取文件流,把它转成url,然后赋值到iframe的src上
代码如下:
使用弹框包裹iframe,使其在当前页面直接预览
index.vue文件

<el-dialog :visible.sync="dialogVisible" :fullscreen="true">
      <iframe
        :src="dialogImageUrl"
        style="border: none; width: 100%; min-height: 88vh"
      >
        <p>您的浏览器不支持 iframe 标签,请从列表中下载预览</p>
      </iframe>
    </el-dialog>

api/index.js文件配置接口

import axios from "axios";
// 预览文档
export const viewDoc = (params) => {
  return axios({
    url: "/invertedindexsystem/file-info/viewDoc",
    params: params,
    responseType: "blob",
  });
};

index.vue文件js部分

<script>
import {
  viewDoc,
} from "@/api/index";
export default {
  name: "IndexView",
  data() {
    return {
      dialogImageUrl: "",
      dialogVisible: false,
    };
  },
  methods: {
    toDetails(data) {
      viewDoc({
        id: data.id,
      }).then((res) => {
        if (!res.data) return;
        var binaryData = [];
        binaryData.push(res.data);
        let url = window.URL.createObjectURL(
          new Blob(binaryData, {
            type: "application/pdf;charset=utf-8",
          })
        );
        if (url != null && url != undefined && url) {
          this.dialogVisible = true;
          this.dialogImageUrl = url;
        }
      });
    },
  },
};
</script>

重点:接口封装部分响应类型设置为blob,默认为get请求方法,但是写在js文件中axios.get又会报错
如下写都会报错:

export const viewDoc = (params) => {
  return axios.get({
    url: "/invertedindexsystem/file-info/viewDoc",
    params: params,
    responseType: "blob",
  });
};
export const viewDoc = (params) => {
  return axios.get(
    url: "/invertedindexsystem/file-info/viewDoc",
    params: params,
    {responseType: "blob"});
};

报错:如果报错:Uncaught (in promise) TypeError: Failed to execute ‘createObjectURL’ on ‘URL’: Overload resolution failed.
at eval也是上面代码错误的原因,没有识别到响应类型是blob

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值