对gcloud storage 封装 (参考 @nest-public/nest-oss @aginix/nestjs-gcloud-storage)
注意: 仍在开发中,目前仅在内部使用
Nest框架 谷歌云 storage (gcloud storage) 上传插件
外部人员仅供参考,请不要用于生产环境,因此导致的事故后果请自行承担。
$ npm i @shubuzuo/nestjs-oss-gcloud
or
$ yarn add @shubuzuo/nestjs-oss-gcloud
config.js 配置
// 你的 身份信息 JSON 文件所在位置
const keyFilename = path.join(__dirname, "../src/config/****.json")
export const config = {
//默认 存储桶名
defaultBucketname: 'your bacuetName',
//存储桶 基本路径
storageBaseUri: 'image',// image/test, image/2010-10-10/test, 首尾不需 带 /
//存储规则
predefinedAcl: 'private', // Default is private
//key 所放路径名
keyFilename: keyFilename,
//项目 id
projectId: '***-***-***',
//文件名前缀
prefix: 'test-'
//最终url https://storage.googleapis.com/your bacuetName/image/test-{上传unid文件名}
}
module.ts
import { Storage } from '@google-cloud/storage';
import { Module } from '@nestjs/common';
import { GcloudOssModule } from '@shubuzuo/nestjs-oss-gcloud';
import * as path from 'path';
import { AppController } from './app.controller';
//身份信息 所在路径
const keyFilename = path.join(__dirname, "../src/config/****.json")
const config = {
//默认 存储桶名
defaultBucketname: 'your bacuetName',
//存储桶 基本路径
storageBaseUri: 'image',// image/test, image/2010-10-10/test, 首尾不需 带 /
//存储规则
predefinedAcl: 'private', // Default is private
//key 所放路径名
keyFilename: keyFilename,
//项目 id
projectId: '***-***-***',
//文件名前缀
prefix: 'test-'
}
@Module({
imports: [
GcloudOssModule.forRoot({
//默认 存储桶名
defaultBucketname: 'your bacuetName',
//存储桶 基本路径
storageBaseUri: 'image',// image/test, image/2010-10-10/test, 首尾不需 带 /
//存储规则
predefinedAcl: 'private', // Default is private
//key 所放路径名
keyFilename: keyFilename,
//项目 id
projectId: '***-***-***',
//文件名前缀
prefix: 'test-'
}),
],
controllers: [AppController],
providers: [],
})
export class AppModule { }
controller.ts
import { UploadedFileMetadata } from '@aginix/nestjs-gcloud-storage';
import { Controller, Get, Post, UploadedFile, UseInterceptors, Query, Res } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { GcloudOssService } from '@shubuzuo/nestjs-oss-gcloud';
import { Response } from 'express';
@Controller()
export class AppController {
constructor(
private readonly storageService: GcloudOssService,
) {}
@Post('gcs/upload')
@UseInterceptors(FileInterceptor('file'))
async UploadedFilesUsingInterceptor(
@UploadedFile()
file: UploadedFileMetadata,
) {
const res = await this.storageService.upload(file)
return res
}
@Get('gcs/download')
async download(
@Query('file') url: string,
@Res() res: Response
) : Promise<Buffer | any> {
let { fileBuffers, fileMetadata } = await this.storageService.download(url)
res.setHeader('Content-type', fileMetadata.contentType)
res.send(fileBuffers[0])
}
}