More fixes for Content-Type

This commit is contained in:
Maksim Karasev 2021-07-22 14:56:55 +03:00
parent 81c5df45a5
commit fa92a28fd5
2 changed files with 18 additions and 4 deletions

View File

@ -1,4 +1,5 @@
import { Router } from 'express';
import fileType from 'file-type';
import logger from '../utils/logger';
import { imageExists } from '../services/imageService';
import { thumbnailCache } from '../utils/cache';
@ -19,11 +20,24 @@ thumbnailsRouter.get('/:image/:type', async (req, res) => {
// so we manually check how we should treat the result
if (result instanceof Buffer) {
res.set('Cache-Control', 'private, max-age=2592000');
const imageType = await fileType.fromBuffer(result);
if (imageType === undefined) {
throw new Error('file-type error');
}
const { mime } = imageType;
res.type(mime);
res.end(result, 'binary');
} else if (result?.type === 'Buffer') {
// hack for handling object returned from redis
res.set('Cache-Control', 'private, max-age=2592000');
res.end(Buffer.from(result.data), 'binary');
const data = Buffer.from(result.data);
const imageType = await fileType.fromBuffer(data);
if (imageType === undefined) {
throw new Error('file-type error');
}
const { mime } = imageType;
res.type(mime);
res.end(data, 'binary');
} else {
throw new Error('Unknow object type');
}

View File

@ -97,7 +97,7 @@ describe('Logged in', () => {
done(err);
}
try {
expect(await fileType.fromBuffer(Buffer.from(res.text))).toBe('image/jpeg');
expect(await fileType.fromBuffer(res.body)).toBe('image/jpeg');
done();
} catch (e) {
done(e);
@ -113,7 +113,7 @@ describe('Logged in', () => {
done(err);
}
try {
expect(await fileType.fromBuffer(Buffer.from(res.text))).toBe('image/webp');
expect(await fileType.fromBuffer(res.body)).toBe('image/webp');
done();
} catch (e) {
done(e);
@ -168,7 +168,7 @@ describe('Not logged in', () => {
done(err);
}
try {
expect(await fileType.fromBuffer(Buffer.from(res.text))).toBe('image/jpeg');
expect(await fileType.fromBuffer(res.body)).toBe('image/jpeg');
done();
} catch (e) {
done(e);