1
0
mirror of https://github.com/hotomoe/hotomoe synced 2024-11-25 07:36:24 +09:00

enhance: fallback option for media proxy

This commit is contained in:
syuilo 2022-12-08 17:16:50 +09:00
parent 2a86942f07
commit 6d46e5cf77
2 changed files with 19 additions and 1 deletions

View File

@ -1,7 +1,10 @@
import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
import { Inject, Injectable } from '@nestjs/common';
import { FastifyInstance, FastifyPluginOptions, FastifyReply, FastifyRequest } from 'fastify';
import sharp from 'sharp';
import fastifyStatic from '@fastify/static';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { isMimeImage } from '@/misc/is-mime-image.js';
@ -16,6 +19,11 @@ import { FileInfoService } from '@/core/FileInfoService.js';
import { LoggerService } from '@/core/LoggerService.js';
import { bindThis } from '@/decorators.js';
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
const assets = `${_dirname}/../../server/file/assets/`;
@Injectable()
export class MediaProxyServerService {
private logger: Logger;
@ -41,6 +49,11 @@ export class MediaProxyServerService {
done();
});
fastify.register(fastifyStatic, {
root: _dirname,
serve: false,
});
fastify.get<{
Params: { url: string; };
Querystring: { url?: string; };
@ -125,6 +138,10 @@ export class MediaProxyServerService {
return image.data;
} catch (err) {
this.logger.error(`${err}`);
if ('fallback' in request.query) {
return reply.sendFile('/dummy.png', assets);
}
if (err instanceof StatusError && (err.statusCode === 302 || err.isClientError)) {
reply.code(err.statusCode);

View File

@ -4,7 +4,8 @@ import { url } from '@/config';
export function getProxiedImageUrl(imageUrl: string, type?: 'preview'): string {
return `${url}/proxy/image.webp?${query({
url: imageUrl,
...(type ? { [type]: "1" } : {}),
fallback: '1',
...(type ? { [type]: '1' } : {}),
})}`;
}