123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- const Router = require('@koa/router');
- const fs = require('fs');
- const router = new Router({ prefix: '/cloud' });
- const util = require('../utils/util');
- const sdk = require('@baiducloud/sdk');
- const Minio = require('minio');
- const OSS = require('ali-oss');
- const imgcloud = require('../service/imgcloud.service');
- const config = require('../config');
- /**
- * 图片云服务API接口
- */
- // 上传cdn文件
- router.post('/upload/files', async (ctx) => {
- try {
- const file = ctx.request.files.file;
- const { userId, userName } = util.decodeToken(ctx);
- let key = `cloud/${userId}/${file.newFilename}`;
- const buffer = fs.readFileSync(file.filepath);
- let client = null;
- if (config.OSS_TYPE === 'minio') {
- // 创建 MinIO 客户端
- client = new Minio.Client({
- endPoint: config.OSS_ENDPOINT,
- port: config.OSS_PORT, // MinIO 默认端口
- useSSL: config.OSS_USESSL, // 如果使用 HTTPS,请设置为 true
- accessKey: config.OSS_ACCESSKEY,
- secretKey: config.OSS_ACCESSKEYSECRET,
- });
- } else if (config.OSS_TYPE === 'baidu') {
- const ossConfig = {
- endpoint: config.OSS_ENDPOINT, //传入Bucket所在区域域名
- credentials: {
- ak: config.OSS_ACCESSKEY, //您的AccessKey
- sk: config.OSS_ACCESSKEYSECRET, //您的SecretAccessKey
- },
- };
- client = new sdk.BosClient(ossConfig);
- } else {
- client = new OSS({
- // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
- region: config.OSS_REGION,
- // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
- accessKeyId: config.OSS_ACCESSKEY,
- accessKeySecret: config.OSS_ACCESSKEYSECRET,
- authorizationV4: true,
- // 填写Bucket名称。
- bucket: config.OSS_BUCKET,
- });
- }
- if (config.OSS_TYPE === 'aliyun') {
- await client.put(key, buffer);
- } else {
- await client.putObject(config.OSS_BUCKET, key, buffer, {
- 'Content-Type': 'image/png', // 添加http header
- 'Cache-Control': 'public, max-age=31536000', // 指定缓存指令
- 'x-bce-acl': 'public-read',
- });
- }
- // 删除临时文件
- fs.unlink(file.filepath, (err) => {
- if (err) {
- return;
- }
- });
- let url = `${config.OSS_CDNDOMAIN}/${key}`;
- if (config.OSS_TYPE === 'minio') {
- url = `${config.OSS_USESSL ? 'https://' : 'http://'}${config.OSS_ENDPOINT}:${config.OSS_PORT}/${config.OSS_BUCKET}/${key}`;
- } else if (config.OSS_TYPE === 'baidu') {
- if (config.OSS_CDNDOMAIN) {
- url = `${config.OSS_CDNDOMAIN}/${key}`;
- } else {
- url = `${config.OSS_ENDPOINT}/${key}`;
- }
- } else {
- if (config.OSS_CDNDOMAIN) {
- url = `${config.OSS_CDNDOMAIN}/${key}`;
- } else {
- url = `https://${config.OSS_BUCKET}.${config.OSS_REGION}.aliyuncs.com/${key}`;
- }
- }
- await imgcloud.create(userId, userName, file.originalFilename, file.newFilename, file.mimetype, file.size, url);
- util.success(ctx, {
- name: file.originalFilename,
- size: file.size,
- type: file.mimetype,
- url,
- });
- } catch (error) {
- fs.unlink(file.filepath, (err) => {
- if (err) {
- return;
- }
- });
- util.fail(ctx, JSON.stringify(error));
- }
- });
- // cdn列表
- router.get('/list', async (ctx) => {
- const { userId } = util.decodeToken(ctx);
- const { pageNum = 1, pageSize = 24 } = ctx.request.query;
- const list = await imgcloud.list(userId, pageNum, pageSize);
- const { total } = await imgcloud.listCount(userId);
- util.success(ctx, {
- list,
- total,
- pageSize: +pageSize,
- pageNum: +pageNum,
- });
- });
- // 文件删除
- router.post('/delete', async (ctx) => {
- const { userId } = util.decodeToken(ctx);
- const { id } = ctx.request.body;
- if (!id) {
- return ctx.throw(400, 'ID不能为空');
- }
- await imgcloud.delete(id, userId);
- util.success(ctx);
- });
- module.exports = router;
|