mirror of
https://github.com/directus/directus.git
synced 2026-04-25 03:00:53 -04:00
Don't crash on upload of corrupted files
This commit is contained in:
@@ -51,45 +51,61 @@ export class FilesService extends ItemsService {
|
||||
if (['image/jpeg', 'image/png', 'image/webp'].includes(payload.type)) {
|
||||
const pipeline = sharp();
|
||||
|
||||
pipeline.metadata().then((meta) => {
|
||||
payload.width = meta.width;
|
||||
payload.height = meta.height;
|
||||
payload.filesize = meta.size;
|
||||
payload.metadata = {};
|
||||
pipeline
|
||||
.metadata()
|
||||
.then((meta) => {
|
||||
payload.width = meta.width;
|
||||
payload.height = meta.height;
|
||||
payload.filesize = meta.size;
|
||||
payload.metadata = {};
|
||||
|
||||
if (meta.icc) {
|
||||
try {
|
||||
payload.metadata.icc = parseICC(meta.icc);
|
||||
} catch (err) {
|
||||
logger.warn(`Couldn't extract ICC information from file`);
|
||||
logger.warn(err);
|
||||
if (meta.icc) {
|
||||
try {
|
||||
payload.metadata.icc = parseICC(meta.icc);
|
||||
} catch (err) {
|
||||
logger.warn(`Couldn't extract ICC information from file`);
|
||||
logger.warn(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (meta.exif) {
|
||||
try {
|
||||
payload.metadata.exif = parseEXIF(meta.exif);
|
||||
} catch (err) {
|
||||
logger.warn(`Couldn't extract EXIF information from file`);
|
||||
logger.warn(err);
|
||||
if (meta.exif) {
|
||||
try {
|
||||
payload.metadata.exif = parseEXIF(meta.exif);
|
||||
} catch (err) {
|
||||
logger.warn(`Couldn't extract EXIF information from file`);
|
||||
logger.warn(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (meta.iptc) {
|
||||
try {
|
||||
payload.metadata.iptc = parseIPTC(meta.iptc);
|
||||
payload.title = payload.title || payload.metadata.iptc.headline;
|
||||
payload.description = payload.description || payload.metadata.iptc.caption;
|
||||
} catch (err) {
|
||||
logger.warn(`Couldn't extract IPTC information from file`);
|
||||
logger.warn(err);
|
||||
if (meta.iptc) {
|
||||
try {
|
||||
payload.metadata.iptc = parseIPTC(meta.iptc);
|
||||
payload.title = payload.title || payload.metadata.iptc.headline;
|
||||
payload.description = payload.description || payload.metadata.iptc.caption;
|
||||
} catch (err) {
|
||||
logger.warn(`Couldn't extract IPTC information from file`);
|
||||
logger.warn(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
await storage.disk(data.storage).put(payload.filename_disk, stream.pipe(pipeline));
|
||||
})
|
||||
.catch((err) => {
|
||||
logger.warn(`Couldn't extract file metadata from ${payload.filename_disk}`);
|
||||
logger.warn(err);
|
||||
});
|
||||
try {
|
||||
await storage.disk(data.storage).put(payload.filename_disk, stream.pipe(pipeline));
|
||||
} catch (err) {
|
||||
logger.warn(`Couldn't save file ${payload.filename_disk}`);
|
||||
logger.warn(err);
|
||||
}
|
||||
} else {
|
||||
await storage.disk(data.storage).put(payload.filename_disk, stream);
|
||||
try {
|
||||
await storage.disk(data.storage).put(payload.filename_disk, stream);
|
||||
} catch (err) {
|
||||
logger.warn(`Couldn't save file ${payload.filename_disk}`);
|
||||
logger.warn(err);
|
||||
}
|
||||
|
||||
const { size } = await storage.disk(data.storage).getStat(payload.filename_disk);
|
||||
payload.filesize = size;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user