oss web直传 服务器签名 - vue版本

前言:

为了减轻服务器压力,采用web直传的方式,直接把资源(图片,文件,视频等)上传到阿里云oss服务器。但是阿里只提供 plupload.js 环境下的 demo,看着脑壳生疼。顿时觉得xx云无耻至极,极度不友好。原本这个事情没必要浪费时间写一篇博客来记录,这下好了,坑够大,为减少广大前端朋友少踩坑,请往下看。

开始:

我当时用vue做的demo,其实是互通的。angular,react自己思考。废话不多说,直接上代码

// vue 采用的是 axios 环境发起的 post 请求,其实就一个函数搞定,如下。
methods: {
    upload(e){
        // 先准备好 oss 服务器需要的内容
        const photo = window.URL.createObjectURL(e.target.files[0])  // 获取图片对象
        const photoName = photo.name  // 原图片的名称
        const key = "photoNameOss"  // 存储到oss的图片名称 自己定,必须确保唯一性,不然会覆盖oss中原有的文件
        const policy = "policy"  // 服务器端同事调oss的API,通过接口返回给前端的 policy
        const OSSAccessKeyId = "OSSAccessKeyId"  // 服务器端同事调oss的API,通过接口返回给前端的 OSSAccessKeyId
        const callback = "callback"  // 服务器端同事调oss的API,通过接口返回给前端的 callback。这个是需要 oss 触发这个回调来通知服务器操作结果。
        const signature = "signature"  // 服务器端同事调oss的API,通过接口返回给前端的 signature。这个就是签名,最关键的。
        const url = `http://${自己的域名}.oss-cn-beijing.aliyuncs.com`
        
        // biu一下,提交给oss
        let param = new FormData(); 
        param.append('name', `${photoName}`)
        param.append('key', `${key}`)
        param.append('policy', `${policy}`)
        param.append('OSSAccessKeyId', `${OSSAccessKeyId}`)
        param.append('success_action_status', 200)  // 不要问为什么,照做
        param.append('callback', `${callback}`)
        param.append('signature', `${signature}`) 
        param.append('file', photo, photoName); // 这个**切记**一定要放到最后去 append ,不然阿里云会一直报 key 的错误
        axios.post(url, param)
            .then(response => {
                console.log("response == ", response)
            })
            .catch((err) => {
                console.log("err == ", err)
            })
    }
}

一定要记住那个 切记 ,一定要把文件对象 append 到最后,一定不要忘记,这个地方我卡了2小时。

vue 的 template 的使用如下

<input class="input-file" name="file" type="file" accept="image/png,image/gif,image/jpeg" @change="upload" />

结束:

这样就搞定了。 是不是一点都不难? 总比被人强迫使用 plupload.js 强吧! 这辈子我都不会让 plupload.js 进入我的插件库,我不喜欢被强迫。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Vue3 组件,可以用来实现 Canvas 签名: ```html <template> <div> <canvas ref="canvas" @mousedown="startDrawing" @mousemove="draw" @mouseup="finishDrawing"></canvas> <button @click="clear">Clear</button> </div> </template> <script> import { onMounted, ref } from 'vue' export default { setup() { const canvasRef = ref(null) const isDrawing = ref(false) let x = 0 let y = 0 const startDrawing = (event) => { x = event.offsetX y = event.offsetY isDrawing.value = true } const draw = (event) => { if (!isDrawing.value) return const canvas = canvasRef.value const context = canvas.getContext('2d') context.beginPath() context.moveTo(x, y) context.lineTo(event.offsetX, event.offsetY) context.stroke() x = event.offsetX y = event.offsetY } const finishDrawing = () => { isDrawing.value = false } const clear = () => { const canvas = canvasRef.value const context = canvas.getContext('2d') context.clearRect(0, 0, canvas.width, canvas.height) } onMounted(() => { const canvas = canvasRef.value const context = canvas.getContext('2d') canvas.width = 300 canvas.height = 200 context.strokeStyle = 'black' context.lineWidth = 2 }) return { canvasRef, startDrawing, draw, finishDrawing, clear } } } </script> ``` 这个组件包含一个 Canvas 元素和一个 Clear 按钮。当用户在 Canvas 上按下鼠标左键时,组件会开始绘制用户的签名。用户可以在 Canvas 上拖动鼠标来绘制他们的签名。当用户松开鼠标左键时,组件会停止绘制签名。当用户点击 Clear 按钮时,组件会清除 Canvas 上的所有内容。 这个组件使用Vue3 的 Composition API。它使用了 ref 函数来创建响应式变量,以及 onMounted 函数来在组件挂载时初始化 Canvas。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值