Don't crash on upload of corrupted files

This commit is contained in:
rijkvanzanten
2021-01-25 19:03:25 -05:00
parent a7cd02a5a6
commit 154ec3977b

View File

@@ -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;
}