diff --git a/package.json b/package.json index 88f830980..e23b537ac 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "electron-in-page-search": "1.3.2", "express": "4.16.4", "express-session": "1.15.6", + "file-type": "10.7.0", "fs-extra": "7.0.1", "get-port": "4.1.0", "helmet": "3.15.0", diff --git a/src/services/image.js b/src/services/image.js index 2f4b15c16..bfbe2d796 100644 --- a/src/services/image.js +++ b/src/services/image.js @@ -1,6 +1,7 @@ "use strict"; const repository = require('./repository'); +const log = require('./log'); const protectedSessionService = require('./protected_session'); const noteService = require('./notes'); const imagemin = require('imagemin'); @@ -13,7 +14,13 @@ const sanitizeFilename = require('sanitize-filename'); async function saveImage(buffer, originalName, parentNoteId) { const resizedImage = await resize(buffer); - const optimizedImage = await optimize(resizedImage); + let optimizedImage; + try { + optimizedImage = await optimize(resizedImage); + } catch (e) { + log.error(e); + optimizedImage = resizedImage; + } const imageFormat = imageType(optimizedImage); diff --git a/src/services/import/enex.js b/src/services/import/enex.js index 81a7f386d..183e2b192 100644 --- a/src/services/import/enex.js +++ b/src/services/import/enex.js @@ -1,4 +1,5 @@ const sax = require("sax"); +const fileType = require('file-type'); const stream = require('stream'); const xml2js = require('xml2js'); const log = require("../log"); @@ -222,7 +223,26 @@ async function importEnex(file, parentNote) { const mediaRegex = new RegExp(`]*>`, 'g'); + const fileTypeFromBuffer = fileType(resource.content); + if (fileTypeFromBuffer) { + // If fileType returns something for buffer, then set the mime given + resource.mime = fileTypeFromBuffer.mime; + } + + const createResourceNote = async () => { + const resourceNote = (await noteService.createNote(noteEntity.noteId, resource.title, resource.content, { + attributes: resource.attributes, + type: 'file', + mime: resource.mime + })).note; + + const resourceLink = `${utils.escapeHtml(resource.title)}`; + + noteEntity.content = noteEntity.content.replace(mediaRegex, resourceLink); + } + if (["image/jpeg", "image/png", "image/gif"].includes(resource.mime)) { + try { const originalName = "image." + resource.mime.substr(6); const { url } = await imageService.saveImage(resource.content, originalName, noteEntity.noteId); @@ -236,17 +256,13 @@ async function importEnex(file, parentNote) { // otherwise image would be removed since no note would include it note.content += imageLink; } + } catch (e) { + log.error("error when saving image from ENEX file: " + e); + await createResourceNote(); + } } else { - const resourceNote = (await noteService.createNote(noteEntity.noteId, resource.title, resource.content, { - attributes: resource.attributes, - type: 'file', - mime: resource.mime - })).note; - - const resourceLink = `${utils.escapeHtml(resource.title)}`; - - noteEntity.content = noteEntity.content.replace(mediaRegex, resourceLink); + await createResourceNote(); } }