后端实现OssSts

This commit is contained in:
2025-06-08 22:24:59 +08:00
parent 81dcbf0cde
commit a4fd4bf5dd
8 changed files with 440 additions and 0 deletions

View File

@@ -12,6 +12,7 @@ import { ResourceModule } from './resource/resource.module';
import { BlogModule } from './blog/blog.module';
import { RoleModule } from './role/role.module';
import { AdminModule } from './admin/admin.module';
import { OssModule } from './oss/oss.module';
@Module({
imports: [
@@ -36,6 +37,7 @@ import { AdminModule } from './admin/admin.module';
BlogModule,
RoleModule,
AdminModule,
OssModule,
],
controllers: [AppController],
providers: [AppService],

View File

@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { OssController } from './oss.controller';
describe('OssController', () => {
let controller: OssController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [OssController],
}).compile();
controller = module.get<OssController>(OssController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
});

View File

@@ -0,0 +1,21 @@
import { Controller, Get, Request, UseGuards } from '@nestjs/common';
import { OssService } from './oss.service';
import { AuthGuard } from '@nestjs/passport';
@Controller('oss')
export class OssController {
constructor(
private readonly ossService: OssService,
) { }
@UseGuards(AuthGuard('jwt'))
@Get('sts')
async getStsToken(@Request() req) {
const { userId, sessionId } = req.user;
return {
...await this.ossService.getStsToken(`${userId}`),
userId,
}
}
}

View File

@@ -0,0 +1,9 @@
import { Module } from '@nestjs/common';
import { OssService } from './oss.service';
import { OssController } from './oss.controller';
@Module({
providers: [OssService],
controllers: [OssController]
})
export class OssModule {}

View File

@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { OssService } from './oss.service';
describe('OssService', () => {
let service: OssService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [OssService],
}).compile();
service = module.get<OssService>(OssService);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
});

View File

@@ -0,0 +1,23 @@
import { Injectable } from '@nestjs/common';
import { STS } from 'ali-oss';
@Injectable()
export class OssService {
private sts = new STS({
accessKeyId: process.env.ALIYUN_ACCESS_KEY_ID,
accessKeySecret: process.env.ALIYUN_ACCESS_KEY_SECRET,
});
async getStsToken(session: string) {
return this.sts.assumeRole(
process.env.ALIYUN_OSS_STS_ROLE_ARN, ``, 3600, `${session}`,
).then((res) => {
return res.credentials;
}).catch(err => {
console.error('获取STS Token失败:', err);
throw new Error('获取STS Token失败');
})
}
}