浏览器访问阿里云PDF文件不是直接打开的问题

浏览器访问阿里云地址的PDF文件,变成了下载而不是直接打开的问题。

场景:在后台管理项目中的pdf上传功能,上传到阿里云,得到一个阿里云的url地址,前端利用iframe标签预览。此时发现并没有预览成功,浏览器直接去下载pdf文件了。即使把该地址直接在地址栏访问也会变成下载。此时可以发现并不是前端代码或是浏览器的问题。因该是阿里云配置的原因。

下面提供前端的解决思路:

由于直接访问阿里云地址会下载文件,那么我们可以先把文件以流的形式下载到本地后,再转成blob格式赋值给iframe进行预览。
提示:如果下面代码下载文件流时遇到跨域问题,这时需要配置一下阿里云允许跨域访问。

const reqUrl = "阿里云地址"
const x = new window.XMLHttpRequest()
x.open('GET', reqUrl, true)
x.responseType = 'blob' //返回格式为blob
x.onload = () => {
  const url = window.URL.createObjectURL(x.response) //将后端返回的blob文件读取出url
  console.log('blob====',x.response)   //Blob
  console.log('url====',url)   //blob:http://localhost:XXXXXX
}
x.send()
完整代码

抽离pdf预览组件

<template>
  <div class="PdfPreview">
    <el-dialog  :title="title" :visible.sync="open" width="80%"  append-to-body :close-on-click-modal="false">
      <iframe style="width:100%;height:100%;display:block;border:0;"  ref="mainiframe" :src="url"  ></iframe>
    </el-dialog>
  </div>
</template>
<script>
export default{
  data(){
    return{
      title:"",
      open:false,
      url:"",
    }
  },
  methods:{
    show(url){
      const reqUrl = url
      const x = new window.XMLHttpRequest()
      x.open('GET', reqUrl, true)
      x.responseType = 'blob' //返回格式为blob
      x.onload = () => {
        this.url = window.URL.createObjectURL(x.response) //将后端返回的blob文件读取出url
      
        console.log('blob====',x.response)   //Blob
        console.log('url====',this.url)   //blob:http://localhost:7197/cb047277-e5e6-4905-bf8c-dbecd86a0105

          // url可以预览和下载------如果想要下载就把下方注释打开即可
          // const a = document.createElement('a')
          // a.href = this.url
          // a.download = fileName
          // a.click()
      }
      x.send()
      this.open = true
    }
  }
}
</script>
<style lang="scss" scoped>
.PdfPreview{
  .iframe{
    width: 100%;
    height: 100%;
    display: block;
    border: 0;
  }
}
::v-deep .el-dialog__body{
  height: 80vh;
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值