diff --git a/api/src/services/files.ts b/api/src/services/files.ts index 2b3d947b34..0c3d64b372 100644 --- a/api/src/services/files.ts +++ b/api/src/services/files.ts @@ -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; }