简单的文件直传阿里OSS

507 阅读1分钟

在开发中,一般来说图片上传都是前端转成base64后通过接口的方式传给后端,再由后端进行操作,然后决定是保存在服务器还是云端。现在教一种可以直接通过前端上传到阿里云OSS对象存储。

准备工作

一个阿里云账号,开通OSS对象存储服务,创建RAM账号并设置账号的权限。

安装插件

npm install ali-oss --save

使用

将功能封装,使用时调用,创建 useoss.js文件

封装

const OSS = require("ali-oss");
let client = new OSS({
    // region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
    region: "XXXXXXX",
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
    accessKeyId: "XXXXXXXXXXXXXXXXXXXX",
    accessKeySecret: "XXXXXXXXXXXXXXXXXXX",
    bucket: "存储的bucket名",
});
// 直接上传
async function upload(fileName, data) {
    try {
        // object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
        await client.put(fileName, data);
    } catch (e) {
        console.log(e);
    }
}
// 上传返回url
async function uploadUrl(fileName, data) {
    try {
        // object-key可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
        let result = await client.put(fileName, data);
        return result.url
    } catch (e) {
        console.log(e);
    }
}

export default {
    upload,
    uploadUrl,
}

上传

<template>
  <input type="file" @change="onchange($event)" />
</template>

<script >
import Oss from "@/hooks/useoss";
export default {
  name: "App",
  setup() {
    async function onchange(event) {
      const data = event.target.files[0];
      await Oss.uploadUrl(data.name, data);  //上传
    }
    return {
      onchange,
    };
  },
};
</script>

大功告成