enhance: fallback option for media proxy
This commit is contained in:
		
							parent
							
								
									2a86942f07
								
							
						
					
					
						commit
						6d46e5cf77
					
				
					 2 changed files with 19 additions and 1 deletions
				
			
		|  | @ -1,7 +1,10 @@ | ||||||
| import * as fs from 'node:fs'; | import * as fs from 'node:fs'; | ||||||
|  | import { fileURLToPath } from 'node:url'; | ||||||
|  | import { dirname } from 'node:path'; | ||||||
| import { Inject, Injectable } from '@nestjs/common'; | import { Inject, Injectable } from '@nestjs/common'; | ||||||
| import { FastifyInstance, FastifyPluginOptions, FastifyReply, FastifyRequest } from 'fastify'; | import { FastifyInstance, FastifyPluginOptions, FastifyReply, FastifyRequest } from 'fastify'; | ||||||
| import sharp from 'sharp'; | import sharp from 'sharp'; | ||||||
|  | import fastifyStatic from '@fastify/static'; | ||||||
| import { DI } from '@/di-symbols.js'; | import { DI } from '@/di-symbols.js'; | ||||||
| import type { Config } from '@/config.js'; | import type { Config } from '@/config.js'; | ||||||
| import { isMimeImage } from '@/misc/is-mime-image.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 { LoggerService } from '@/core/LoggerService.js'; | ||||||
| import { bindThis } from '@/decorators.js'; | import { bindThis } from '@/decorators.js'; | ||||||
| 
 | 
 | ||||||
|  | const _filename = fileURLToPath(import.meta.url); | ||||||
|  | const _dirname = dirname(_filename); | ||||||
|  | 
 | ||||||
|  | const assets = `${_dirname}/../../server/file/assets/`; | ||||||
|  | 
 | ||||||
| @Injectable() | @Injectable() | ||||||
| export class MediaProxyServerService { | export class MediaProxyServerService { | ||||||
| 	private logger: Logger; | 	private logger: Logger; | ||||||
|  | @ -41,6 +49,11 @@ export class MediaProxyServerService { | ||||||
| 			done(); | 			done(); | ||||||
| 		}); | 		}); | ||||||
| 
 | 
 | ||||||
|  | 		fastify.register(fastifyStatic, { | ||||||
|  | 			root: _dirname, | ||||||
|  | 			serve: false, | ||||||
|  | 		}); | ||||||
|  | 
 | ||||||
| 		fastify.get<{ | 		fastify.get<{ | ||||||
| 			Params: { url: string; }; | 			Params: { url: string; }; | ||||||
| 			Querystring: { url?: string; }; | 			Querystring: { url?: string; }; | ||||||
|  | @ -125,6 +138,10 @@ export class MediaProxyServerService { | ||||||
| 			return image.data; | 			return image.data; | ||||||
| 		} catch (err) { | 		} catch (err) { | ||||||
| 			this.logger.error(`${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)) { | 			if (err instanceof StatusError && (err.statusCode === 302 || err.isClientError)) { | ||||||
| 				reply.code(err.statusCode); | 				reply.code(err.statusCode); | ||||||
|  |  | ||||||
|  | @ -4,7 +4,8 @@ import { url } from '@/config'; | ||||||
| export function getProxiedImageUrl(imageUrl: string, type?: 'preview'): string { | export function getProxiedImageUrl(imageUrl: string, type?: 'preview'): string { | ||||||
| 	return `${url}/proxy/image.webp?${query({ | 	return `${url}/proxy/image.webp?${query({ | ||||||
| 		url: imageUrl, | 		url: imageUrl, | ||||||
| 		...(type ? { [type]: "1" } : {}), | 		fallback: '1', | ||||||
|  | 		...(type ? { [type]: '1' } : {}), | ||||||
| 	})}`;
 | 	})}`;
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue