mirror of
https://github.com/directus/directus.git
synced 2026-01-26 17:48:05 -05:00
Pass through non image assets in assets endpoint
This commit is contained in:
@@ -18,24 +18,32 @@ export default class AssetsService {
|
||||
async getAsset(id: string, transformation: Transformation) {
|
||||
const file = await database.select('*').from('directus_files').where({ id }).first();
|
||||
|
||||
const resizeOptions = this.parseTransformation(transformation);
|
||||
const assetFilename =
|
||||
path.basename(file.filename_disk, path.extname(file.filename_disk)) +
|
||||
this.getAssetSuffix(resizeOptions) +
|
||||
path.extname(file.filename_disk);
|
||||
const type = file.type;
|
||||
|
||||
const { exists } = await storage.disk(file.storage).exists(assetFilename);
|
||||
// We can only transform JPEG, PNG, and WebP
|
||||
if (['image/jpeg', 'image/png', 'image/webp'].includes(type)) {
|
||||
const resizeOptions = this.parseTransformation(transformation);
|
||||
const assetFilename =
|
||||
path.basename(file.filename_disk, path.extname(file.filename_disk)) +
|
||||
this.getAssetSuffix(resizeOptions) +
|
||||
path.extname(file.filename_disk);
|
||||
|
||||
const { exists } = await storage.disk(file.storage).exists(assetFilename);
|
||||
|
||||
if (exists) {
|
||||
return { stream: storage.disk(file.storage).getStream(assetFilename), file };
|
||||
}
|
||||
|
||||
const readStream = storage.disk(file.storage).getStream(file.filename_disk);
|
||||
const transformer = sharp().resize(resizeOptions);
|
||||
|
||||
await storage.disk(file.storage).put(assetFilename, readStream.pipe(transformer));
|
||||
|
||||
if (exists) {
|
||||
return { stream: storage.disk(file.storage).getStream(assetFilename), file };
|
||||
} else {
|
||||
const readStream = storage.disk(file.storage).getStream(file.filename_disk);
|
||||
return { stream: readStream, file };
|
||||
}
|
||||
|
||||
const readStream = storage.disk(file.storage).getStream(file.filename_disk);
|
||||
const transformer = sharp().resize(resizeOptions);
|
||||
|
||||
await storage.disk(file.storage).put(assetFilename, readStream.pipe(transformer));
|
||||
|
||||
return { stream: storage.disk(file.storage).getStream(assetFilename), file };
|
||||
}
|
||||
|
||||
private parseTransformation(transformation: Transformation): ResizeOptions {
|
||||
|
||||
Reference in New Issue
Block a user