diff --git a/.env.example b/.env.example
index 27e6d21535..df428078f0 100644
--- a/.env.example
+++ b/.env.example
@@ -18,5 +18,11 @@ HTTP_PORT=23000
VERDACCIO_PORT=4873
-LOCAL_STORAGE_BASE_URL=http://localhost:23000/uploads
USE_STATIC_SERVER=true
+LOCAL_STORAGE_BASE_URL=http://localhost:23000/uploads
+STORAGE_BASE_URL=http://localhost:23000/uploads
+
+ALIYUN_OSS_REGION=oss-cn-beijing
+ALIYUN_OSS_ACCESS_KEY_ID=
+ALIYUN_OSS_ACCESS_KEY_SECRET=
+ALIYUN_OSS_BUCKET=
diff --git a/packages/app/src/api/index.ts b/packages/app/src/api/index.ts
index bb04bc3f14..521adbc696 100644
--- a/packages/app/src/api/index.ts
+++ b/packages/app/src/api/index.ts
@@ -28,7 +28,7 @@ const api = Api.create({
charset: 'utf8mb4',
collate: 'utf8mb4_unicode_ci',
},
- // logging: false,
+ logging: false,
define: {},
sync,
},
diff --git a/packages/app/src/api/migrate.ts b/packages/app/src/api/migrate.ts
index 0a6be4e3b6..2aece5ae76 100644
--- a/packages/app/src/api/migrate.ts
+++ b/packages/app/src/api/migrate.ts
@@ -188,11 +188,23 @@ api.registerPlugin('plugin-file-manager', [path.resolve(__dirname, '../../../plu
});
}
const Storage = database.getModel('storages');
+ // await Storage.create({
+ // title: '本地存储',
+ // name: `local`,
+ // type: 'local',
+ // baseUrl: process.env.LOCAL_STORAGE_BASE_URL,
+ // default: true
+ // });
await Storage.create({
- title: '本地存储',
- name: `local`,
- type: 'local',
- baseUrl: process.env.LOCAL_STORAGE_BASE_URL,
+ name: `ali-oss`,
+ type: 'ali-oss',
+ baseUrl: process.env.STORAGE_BASE_URL,
+ options: {
+ region: process.env.ALIYUN_OSS_REGION,// 'oss-cn-beijing',
+ accessKeyId: process.env.ALIYUN_OSS_ACCESS_KEY_ID,// 'LTAI4GEGDJsdGantisvSaz47',
+ accessKeySecret: process.env.ALIYUN_OSS_ACCESS_KEY_SECRET,//'cDFaOUwigps7ohRmsfBFXGDxNm8uIq',
+ bucket: process.env.ALIYUN_OSS_BUCKET, //'nocobase'
+ },
default: true
});
await database.getModel('collections').import(require('./collections/example').default);
diff --git a/packages/app/src/components/views/Field/index.tsx b/packages/app/src/components/views/Field/index.tsx
index e6a7bf5ac2..9e7e854e4f 100644
--- a/packages/app/src/components/views/Field/index.tsx
+++ b/packages/app/src/components/views/Field/index.tsx
@@ -258,7 +258,7 @@ export function AttachmentFieldItem(props: any) {
e.preventDefault();
}
}} className={'attachment-field-item'} target={'_blank'} href={url}>
-
+
{
+ if (err) return cb(err)
+ this.client.putStream(filename, file.stream).then(
+ result => cb(null, {
+ filename: result.name,
+ url : result.url
+ })
+ ).catch(cb);
+ });
+ }
+
+ _removeFile(req, file, cb) {
+ if (!this.client) {
+ console.error('oss client undefined');
+ return cb({message: 'oss client undefined'});
+ }
+ this.client.delete(file.filename).then(
+ result => cb(null, result)
+ ).catch(cb);
+ }
+}
+
+export default (storage) => new AliOssStorage({config: storage.options});
diff --git a/packages/plugin-file-manager/src/storages/index.ts b/packages/plugin-file-manager/src/storages/index.ts
index f71923e4b0..fb02afe017 100644
--- a/packages/plugin-file-manager/src/storages/index.ts
+++ b/packages/plugin-file-manager/src/storages/index.ts
@@ -1,9 +1,11 @@
import local from './local';
+import oss from './ali-oss';
import { STORAGE_TYPE_LOCAL, STORAGE_TYPE_ALI_OSS } from '../constants';
const map = new Map();
map.set(STORAGE_TYPE_LOCAL, local);
+map.set(STORAGE_TYPE_ALI_OSS, oss);
export default map;
diff --git a/packages/plugin-file-manager/src/storages/local.ts b/packages/plugin-file-manager/src/storages/local.ts
index cb7efa7a32..89c5725ddb 100644
--- a/packages/plugin-file-manager/src/storages/local.ts
+++ b/packages/plugin-file-manager/src/storages/local.ts
@@ -1,4 +1,3 @@
-import crypto from 'crypto';
import path from 'path';
import { URL } from 'url';
import mkdirp from 'mkdirp';
@@ -6,6 +5,7 @@ import multer from 'multer';
import serve from 'koa-static';
import mount from 'koa-mount';
import { STORAGE_TYPE_LOCAL } from '../constants';
+import { getFilename } from '../utils';
export function getDocumentRoot(storage): string {
const { documentRoot = 'uploads' } = storage.options || {};
@@ -71,9 +71,5 @@ export default (storage) => multer.diskStorage({
cb(null, destPath);
}).catch(cb);
},
- filename: function (req, file, cb) {
- crypto.randomBytes(16, (err, raw) => {
- cb(err, err ? undefined : `${raw.toString('hex')}${path.extname(file.originalname)}`)
- });
- }
+ filename: getFilename
});
diff --git a/packages/plugin-file-manager/src/utils.ts b/packages/plugin-file-manager/src/utils.ts
new file mode 100644
index 0000000000..c5a1677c85
--- /dev/null
+++ b/packages/plugin-file-manager/src/utils.ts
@@ -0,0 +1,8 @@
+import crypto from 'crypto';
+import path from 'path';
+
+export function getFilename (req, file, cb) {
+ crypto.pseudoRandomBytes(16, function (err, raw) {
+ cb(err, err ? undefined : `${raw.toString('hex')}${path.extname(file.originalname)}`)
+ })
+}