后端实现OssSts
This commit is contained in:
18
tone-page-server/src/oss/oss.controller.spec.ts
Normal file
18
tone-page-server/src/oss/oss.controller.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
||||
21
tone-page-server/src/oss/oss.controller.ts
Normal file
21
tone-page-server/src/oss/oss.controller.ts
Normal 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,
|
||||
}
|
||||
}
|
||||
}
|
||||
9
tone-page-server/src/oss/oss.module.ts
Normal file
9
tone-page-server/src/oss/oss.module.ts
Normal 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 {}
|
||||
18
tone-page-server/src/oss/oss.service.spec.ts
Normal file
18
tone-page-server/src/oss/oss.service.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
||||
23
tone-page-server/src/oss/oss.service.ts
Normal file
23
tone-page-server/src/oss/oss.service.ts
Normal 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失败');
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user