summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-10-09 02:14:03 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-10-09 02:14:03 +0900
commit38cc02e261c39a5e8a9f6c1e506371e23b16184d (patch)
tree04fe6c31dfab18160d2596e75a9fb8502a979cf1 /src
parent10.1.0 (diff)
downloadmisskey-38cc02e261c39a5e8a9f6c1e506371e23b16184d.tar.gz
misskey-38cc02e261c39a5e8a9f6c1e506371e23b16184d.tar.bz2
misskey-38cc02e261c39a5e8a9f6c1e506371e23b16184d.zip
Add tool
Diffstat (limited to 'src')
-rw-r--r--src/tools/move-drive-files.ts64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/tools/move-drive-files.ts b/src/tools/move-drive-files.ts
new file mode 100644
index 0000000000..e34652243f
--- /dev/null
+++ b/src/tools/move-drive-files.ts
@@ -0,0 +1,64 @@
+import * as Minio from 'minio';
+import * as uuid from 'uuid';
+import DriveFile, { DriveFileChunk, getDriveFileBucket } from '../models/drive-file';
+import DriveFileThumbnail, { DriveFileThumbnailChunk } from '../models/drive-file-thumbnail';
+import config from '../config';
+
+DriveFile.find({
+ $or: [{
+ withoutChunks: { $exists: false }
+ }, {
+ withoutChunks: false
+ }]
+}).then(async files => {
+ files.forEach(async file => {
+ const minio = new Minio.Client(config.drive.config);
+
+ const keyDir = `${config.drive.prefix}/${uuid.v4()}`;
+ const key = `${keyDir}/${name}`;
+ const thumbnailKeyDir = `${config.drive.prefix}/${uuid.v4()}`;
+ const thumbnailKey = `${thumbnailKeyDir}/${name}.thumbnail.jpg`;
+
+ const baseUrl = config.drive.baseUrl
+ || `${ config.drive.config.useSSL ? 'https' : 'http' }://${ config.drive.config.endPoint }${ config.drive.config.port ? `:${config.drive.config.port}` : '' }/${ config.drive.bucket }`;
+
+ const bucket = await getDriveFileBucket();
+ const readable = bucket.openDownloadStream(file._id);
+
+ await minio.putObject(config.drive.bucket, key, readable, file.length, {
+ 'Content-Type': file.contentType,
+ 'Cache-Control': 'max-age=31536000, immutable'
+ });
+
+ await DriveFile.findOneAndUpdate({ _id: file._id }, {
+ $set: {
+ 'metadata.withoutChunks': true,
+ 'metadata.storage': 'minio',
+ 'metadata.storageProps': {
+ key: key,
+ thumbnailKey: thumbnailKey
+ },
+ 'metadata.url': `${ baseUrl }/${ keyDir }/${ encodeURIComponent(name) }`,
+ }
+ });
+
+ // チャンクをすべて削除
+ await DriveFileChunk.remove({
+ files_id: file._id
+ });
+
+ //#region サムネイルもあれば削除
+ const thumbnail = await DriveFileThumbnail.findOne({
+ 'metadata.originalId': file._id
+ });
+
+ if (thumbnail) {
+ await DriveFileThumbnailChunk.remove({
+ files_id: thumbnail._id
+ });
+
+ await DriveFileThumbnail.remove({ _id: thumbnail._id });
+ }
+ //#endregion
+ });
+});