@shubuzuo/nestjs-oss

对需要及可能用到的 第三方 OSS 模块进行封装, 降低对项目的侵入

Usage no npm install needed!

<script type="module">
  import shubuzuoNestjsOss from 'https://cdn.skypack.dev/@shubuzuo/nestjs-oss';
</script>

README

nest-oss OSS 封装

注意:仍在开发中,目前仅在内部使用
Nest框架 云 OSS (暂有 ali) 上传插件

使用说明

外部人员仅供参考,请不要用于生产环境,因此导致的事故后果请自行承担。

安装

$ npm i @shubuzuo/nestjs-oss 

or

$ yarn add @shubuzuo/nestjs-oss 

用法

config.js 配置

export const config = {
    client: {
        endpoint: 'oss-cn-shenzhen.aliyuncs.com', // endpoint域名
        accessKeyId: 'xxxxxxxxxxxx', // 账号
        accessKeySecret: 'xxxxxxx', // 密码
        bucket: 'xxxxxx', // 存储桶
        internal: false, // 是否使用阿里云内部网访问
        secure: true, // 使用 HTTPS
        cname: false, // 自定义endpoint
        timeout: '90s'
    },
    domain: '', // 自定义域名
};

module.ts

import { AppController } from './test.controller';
import { IninderOssModule } from '@shubuzuo/nestjs-oss';

const config = {}

@Module({
    imports: [ 
        IninderOssModule.forRoot(config)
    ],
    controllers: [AppController],
})

export class AppModule{}

controller.ts

import { Controller, Req, Post, Get, UseInterceptors, UploadedFiles } from '@nestjs/common';
import { FilesInterceptor } from '@nestjs/platform-express';
import { AliOssService } from '@shubuzuo/nestjs-oss';

/**
 * AppController
 * @export
 * @class AppControllerr
 */
@Controller()
export class AppController {
    constructor(private readonly aliOssService: AliOssService) {}

   /**
    * 多文件上传oss
    */
    @Post('uploadOSS')
    @UseInterceptors(FilesInterceptor('files'))
    public async uploadOSS(@UploadedFiles() file) {
        const result = await this.aliOssService.upload(file);

        return result;
        // result [
        // 	{
        // 		uploaded: true,
        // 		path: 'images/20191115/16420962.png',
        // 		src: 'http://xxxx.oss-cn-shenzhen.aliyuncs.com/images/20191115/16420962.png',
        // 		srcSign: 'https://xxx.oss-cn-shenzhen.aliyuncs.com/images/20191115/16420962.png?OSSAccessKeyId=LTAI6lgwcBcCbiKX&Expires=1573814530&Signature=brYN7qbDdyxGARc%2BdoRsnblJx2w%3D',
        // 		message: '上传成功'
        // 	}
        // ]
    }
    
    /**
     * 对oss文件签名
     */
    @Get('getUrl')
    public async uploadOSS(@Req() request) {
        const url = req.query.url; // 原始oss url
        const width = req.query.width; // 设置返回图片宽度
        const height = req.query.height; // 设置返回图片高度
        const result = await this.aliOssService.getOssSign(file, width, height);

        return result;
    }
    
    /**
     * 前端获取签名
     */
    @Get('uploadSgin')
    public getUploadSgin() {
        const result = this.aliOssService.getUploadSgin();

        return result;

        // result {
        // 	policy: 'xxxxxxxxxxxxxx';
        // 	OSSAccessKeyId: 'xxxxxxxxxxxxxx'
        // 	signature: 'xxxxxxxxxxxxxx'
        // }
    }

    /**
     * 批量删除图片
     */
    @Get('delete')
    public async deleteOSS(@Req() request) {
        const uploadUrl = ['images/20191115/16420962.png'];
        const result = await this.aliOssService.deleteMulti([uploadUrl]);

        return result;
        // result {
        // 	res: {
        // 		status: 200,
        // 		statusCode: 200,
        // 		statusMessage: 'OK',
        // 		// ....
        // 	},
        //  deleted: [ 'images/20191115/16420962.png' ]
        // }
    }
}