From a20215cefb04c5ea88ba484851246891f0a794d9 Mon Sep 17 00:00:00 2001 From: sshakndr Date: Mon, 27 Jan 2025 12:54:06 +0700 Subject: [PATCH] feat(nodejs): restore file by url --- CHANGELOG.md | 1 + web/documentserver-example/nodejs/app.js | 47 ++++++++++++------- .../nodejs/views/editor.ejs | 2 + 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b7c46f7..bb59a5b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Change Log +- nodejs: restore by url - nodejs: support vsdx in diagram editor - nodejs: support pages, numbers, key formats - golang: new integration example diff --git a/web/documentserver-example/nodejs/app.js b/web/documentserver-example/nodejs/app.js index dcb31f24..92efe7df 100755 --- a/web/documentserver-example/nodejs/app.js +++ b/web/documentserver-example/nodejs/app.js @@ -651,32 +651,47 @@ app.post('/reference', (req, res) => { // define a handler for renaming file result(data); }); -app.put('/restore', (req, res) => { // define a handler for restore file version - const { fileName } = req.body; +app.put('/restore', async (req, res) => { // define a handler for restore file version + const { fileName, version, url } = req.body; const result = {}; if (fileName) { req.DocManager = new DocManager(req, res); const userAddress = req.DocManager.curUserHostAddress(); const key = req.DocManager.getKey(fileName); - const { version } = req.body; const filePath = req.DocManager.storagePath(fileName, userAddress); const historyPath = req.DocManager.historyPath(fileName, userAddress); const newVersion = req.DocManager.countVersion(historyPath) + 1; - const versionPath = path.join(`${historyPath}`, `${version}`, `prev${fileUtility.getFileExtension(fileName)}`); const newVersionPath = path.join(`${historyPath}`, `${newVersion}`); - - if (fileSystem.existsSync(versionPath)) { - req.DocManager.createDirectory(newVersionPath); - req.DocManager.copyFile( - filePath, - path.join(`${newVersionPath}`, `prev${fileUtility.getFileExtension(fileName)}`), - ); - fileSystem.writeFileSync(path.join(`${newVersionPath}`, 'key.txt'), key); - req.DocManager.copyFile(versionPath, filePath); - result.success = true; + if (url) { + const { status, data } = await urllib.request(url, { method: 'GET' }); + if (status === 200) { + req.DocManager.createDirectory(newVersionPath); + req.DocManager.copyFile( + filePath, + path.join(`${newVersionPath}`, `prev${fileUtility.getFileExtension(fileName)}`), + ); + fileSystem.writeFileSync(path.join(`${newVersionPath}`, 'key.txt'), key); + fileSystem.writeFileSync(filePath, data); + result.success = true; + } else { + result.success = false; + result.error = `Document editing service returned status: ${status}`; + } } else { - result.success = false; - result.error = 'Version path does not exists'; + const versionPath = path.join(`${historyPath}`, `${version}`, `prev${fileUtility.getFileExtension(fileName)}`); + if (fileSystem.existsSync(versionPath)) { + req.DocManager.createDirectory(newVersionPath); + req.DocManager.copyFile( + filePath, + path.join(`${newVersionPath}`, `prev${fileUtility.getFileExtension(fileName)}`), + ); + fileSystem.writeFileSync(path.join(`${newVersionPath}`, 'key.txt'), key); + req.DocManager.copyFile(versionPath, filePath); + result.success = true; + } else { + result.success = false; + result.error = 'Version path does not exists'; + } } } else { result.success = false; diff --git a/web/documentserver-example/nodejs/views/editor.ejs b/web/documentserver-example/nodejs/views/editor.ejs index a248e99f..bbccf184 100644 --- a/web/documentserver-example/nodejs/views/editor.ejs +++ b/web/documentserver-example/nodejs/views/editor.ejs @@ -109,10 +109,12 @@ var onRequestRestore = function (event) { // the user is trying to restore file version const version = event.data.version; + const url = event.data.url; const fileName = "<%- file.name %>" || null; const directUrl = "<%- file.directUrl %>" || null; const restoreData = { version: version, + url: url, fileName: fileName, }; let xhr = new XMLHttpRequest();