summaryrefslogtreecommitdiff
path: root/src/server/file/send-drive-file.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-05-03 20:03:14 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-05-03 20:03:14 +0900
commit15e4cf1243001873edd1860ee61bc96d003214ee (patch)
tree697c9880c8d131b06382957e92672d654d883528 /src/server/file/send-drive-file.ts
parentoops (diff)
downloadmisskey-15e4cf1243001873edd1860ee61bc96d003214ee.tar.gz
misskey-15e4cf1243001873edd1860ee61bc96d003214ee.tar.bz2
misskey-15e4cf1243001873edd1860ee61bc96d003214ee.zip
サムネイルを予め生成するように
Diffstat (limited to 'src/server/file/send-drive-file.ts')
-rw-r--r--src/server/file/send-drive-file.ts43
1 files changed, 37 insertions, 6 deletions
diff --git a/src/server/file/send-drive-file.ts b/src/server/file/send-drive-file.ts
index ef458265a8..8719ddf70c 100644
--- a/src/server/file/send-drive-file.ts
+++ b/src/server/file/send-drive-file.ts
@@ -1,8 +1,15 @@
+import * as fs from 'fs';
+
import * as Koa from 'koa';
import * as send from 'koa-send';
import * as mongodb from 'mongodb';
-import DriveFile, { getGridFSBucket } from '../../models/drive-file';
-import pour from './pour';
+import DriveFile, { getDriveFileBucket } from '../../models/drive-file';
+import DriveFileThumbnail, { getDriveFileThumbnailBucket } from '../../models/drive-file-thumbnail';
+
+const commonReadableHandlerGenerator = (ctx: Koa.Context) => (e: Error): void => {
+ console.error(e);
+ ctx.status = 500;
+};
export default async function(ctx: Koa.Context) {
// Validate id
@@ -28,9 +35,33 @@ export default async function(ctx: Koa.Context) {
return;
}
- const bucket = await getGridFSBucket();
+ if ('thumbnail' in ctx.query) {
+ // 動画か画像以外
+ if (!/^image\/.*$/.test(file.contentType) && !/^video\/.*$/.test(file.contentType)) {
+ const readable = fs.createReadStream(`${__dirname}/assets/thumbnail-not-available.png`);
+ ctx.set('Content-Type', 'image/png');
+ ctx.body = readable;
+ } else {
+ const thumb = await DriveFileThumbnail.findOne({ 'metadata.originalId': fileId });
+ if (thumb != null) {
+ ctx.set('Content-Type', 'image/jpeg');
+ const bucket = await getDriveFileThumbnailBucket();
+ ctx.body = bucket.openDownloadStream(thumb._id);
+ } else {
+ ctx.set('Content-Type', file.contentType);
+ const bucket = await getDriveFileBucket();
+ ctx.body = bucket.openDownloadStream(fileId);
+ }
+ }
+ } else {
+ if ('download' in ctx.query) {
+ ctx.set('Content-Disposition', 'attachment');
+ }
- const readable = bucket.openDownloadStream(fileId);
-
- pour(readable, file.contentType, ctx);
+ const bucket = await getDriveFileBucket();
+ const readable = bucket.openDownloadStream(fileId);
+ readable.on('error', commonReadableHandlerGenerator(ctx));
+ ctx.set('Content-Type', file.contentType);
+ ctx.body = readable;
+ }
}