OBS无法在线预览的一种解决方式

简述

作者:GavenF
日期:2023年7月22日

从2022年1月起,华为云基于安全考虑不支持在线访问桶中对象,当通过链接访问时,默认会以附件形式下载。
在做项目的时候有在线预览的需求,找了很多解决方案(例如官方说的几个方法,例如使用额外的插件),但都不怎么和自己的脾气,选择了一个笨办法(此处只针对图片,其他的文件请各位自行发散):
使用Axios获取文件源后在浏览器中转为base64或者url。

测试环境的要求

  • Axios (大佬也可以选择自己手搓
  • 桶为公共读

实操

备注:此处所有的链接都为随机构建。如果真的可以点进去,那就“泰裤辣“!

一些注意点

Axios的配置:

  • 返回值类型选择(若不进行配置将默认返回string类型将导致转码错误);

代码:

<template>
	<image :src="imageData" v-if="imageData !== ''">
</template>

<script setup lang="ts">
import axios from ’axios‘;
import { ref } from 'vue';

const obsUrl = 'bucketname.obs.cn-north-4.zxc.com';
const fileKey = 'demo.png';

const imageData = ref('')

axios.get(
	`${obsUrl}/${fileKey}`,
	{responseType: 'arraybuffer'}
).then((res) => {
	// 转ArrayBuffer为Blob类型
	const blob = new Blob([res.data], { type: res.headers['content-type'] })
	
    const reader = new FileReader()
    
    // 使用FileReader将文件内容读取出来
    reader.onload = (e) => {
		imageData .value = e.target?.result?.toString()??''
    }
    reader.readAsDataURL(blob)
})

</script>

<style>
</style>

一些废话

个人发发牢骚,无任何不好的含义
不太了解为啥在线预览会被任务是不安全的操作,但是禁用了此功能却还得让咱绕一圈,麻烦。

你看隔壁腾讯云咋不说这个呢,阿里也似乎没类似的玩意
整这么多,我还不是用着OBS,哎……

另外,个人对于国内的环境,有点难以描述……
找一个问题,各个博客上几乎都是同一篇,难受死,有声明搬运啥的还好,但是也看到好多没有注明出处……

注:
若代码有不正确的地方或者更简便的实现方式请指出,欢迎大家讨论!
搬运前请先和作者联系!!!
搬运前请先和作者联系!!!
搬运前请先和作者联系!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值