全栈之路系列:Express上传OSS详细指南

35 阅读2分钟

准备工作

要在 Express 项目中实现 OSS(对象存储服务)上传功能,你需要做以下准备:

  1. 创建 OSS 账户和存储桶:首先,你需要在 OSS 提供商(如阿里云、AWS S3 等)创建一个账户,并在账户中创建一个存储桶。
  2. 获取 OSS 访问密钥:你需要获取 OSS 的访问密钥,包括 Access Key ID 和 Access Key Secret。这些密钥将用于在你的 Express 应用中访问 OSS。
  3. 安装 OSS SDK:大多数 OSS 提供商都提供了 Node.js SDK,你可以在你的 Express 项目中安装这个 SDK。例如,如果你使用的是阿里云 OSS,你可以使用 npm 安装阿里云 OSS 的 Node.js SDK:

npm install ali-oss

OSS上传

在准备工作完成后,你可以开始编写上传到 OSS 的代码。以下是一个使用阿里云 OSS Node.js SDK 的示例:

const OSS = require('ali-oss');

let client = new OSS({
  region: '<Your region>',
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>',
});

let upload = async function () {
  try {
    let result = await client.put('object-name', 'local-file');
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

upload();

在这个示例中,你需要替换 <Your region><Your AccessKeyId><Your AccessKeySecret> 和 <Your bucket name> 为你的 OSS 账户信息。

其中,在阿里云 OSS 中,region 是指你的 OSS 存储桶所在的地理区域。每个 OSS 存储桶都会在一个特定的地理区域中创建,这个区域就是 region。例如,如果你在中国华东 1(杭州)区域创建了一个 OSS 存储桶,那么你的 region 就是 'oss-cn-hangzhou'

你可以在 OSS 提供商的官方文档中找到更多关于如何使用 SDK 的信息。例如,阿里云 OSS 的 Node.js SDK 文档地址是:www.alibabacloud.com/help/doc-de…

请注意,上传文件到 OSS 通常涉及到文件的读取和上传两个步骤,你可能需要处理来自用户的文件上传请求,然后将文件上传到 OSS。

以下示例,已知图片线上地址(AI生成图片),上传到OSS的完整示例

const path = require('path');
const https = require('https');
const OSS = require('ali-oss');
const { v4: uuidv4 } = require('uuid');

let client = new OSS({
    region: 'oss-cn-hangzhou',
    accessKeyId: 'xxx',
    accessKeySecret: 'xxx',
    bucket: 'ugc-xxx',
});

const OSS_DIR = 'v1-3views-img/';

const ossUpload = async (url) => {
    const request = https.get(url);
    const response = await new Promise((resolve, reject) => {
        request.on('response', resolve);
        request.on('error', reject);
    });

    try {
        const file = {
            name: OSS_DIR + uuidv4() + path.extname(url),
            content: response
        };
        const result = await client.put(file.name, file.content);
        return result.url;
    } catch (error) {
        console.error(`Error: ${error.message}`);
        throw error;
    }
};

module.exports = { ossUpload }