fix-webdav-upload

Simon Smith committed Sep 6, 2023 at 13:53 UTC f297857d70ae6ace90a1dc577d30827fcfbf2ffd
1 file changed +25 -27
db.js
+25 -27
@@ -3064,39 +3064,37 @@ module.exports.CreateDB = function (parent, func) {
3064
3065 // Upload to the WebDAV folder
3066 function performWebDavUpload(client, filepath) {
3067 - var fileStream = require('fs').createReadStream(filepath);
3068 - fileStream.on('close', function () { if (func) { func('WebDAV upload completed'); } })
3069 - fileStream.on('error', function (err) { if (func) { func('WebDAV (fileUpload) error: ' + err); } })
3070 - fileStream.pipe(client.createWriteStream('/' + webdavfolderName + '/' + require('path').basename(filepath)));
3071 - if (func) { func('Uploading using WebDAV...'); }
3067 + require('fs').stat(filepath, function(err,stat){
3068 + var fileStream = require('fs').createReadStream(filepath);
3069 + fileStream.on('close', function () { if (func) { func('WebDAV upload completed'); } })
3070 + fileStream.on('error', function (err) { if (func) { func('WebDAV (fileUpload) error: ' + err); } })
3071 + fileStream.pipe(client.createWriteStream('/' + webdavfolderName + '/' + require('path').basename(filepath), { headers: { "Content-Length": stat.size } }));
3072 + if (func) { func('Uploading using WebDAV...'); }
3073 + });
3074 }
3075
3076 if (func) { func('Attempting WebDAV upload...'); }
3077 const { createClient } = require('webdav');
3076 - const client = createClient(parent.config.settings.autobackup.webdav.url, { username: parent.config.settings.autobackup.webdav.username, password: parent.config.settings.autobackup.webdav.password });
3077 - var directoryItems = client.getDirectoryContents('/');
3078 - directoryItems.then(
3079 - function (files) {
3080 - var folderFound = false;
3081 - for (var i in files) { if ((files[i].basename == webdavfolderName) && (files[i].type == 'directory')) { folderFound = true; } }
3082 - if (folderFound == false) {
3083 - client.createDirectory(webdavfolderName).then(function (a) {
3084 - if (a.statusText == 'Created') {
3085 - if (func) { func('WebDAV folder created'); }
3086 - performWebDavUpload(client, filename);
3087 - } else {
3088 - if (func) { func('WebDAV (createDirectory) status: ' + a.statusText); }
3089 - }
3090 - }).catch(function (err) {
3091 - if (func) { func('WebDAV (createDirectory) error: ' + err); }
3092 - });
3093 - } else {
3094 - performWebDavCleanup(client);
3078 + const client = createClient(parent.config.settings.autobackup.webdav.url, {
3079 + username: parent.config.settings.autobackup.webdav.username,
3080 + password: parent.config.settings.autobackup.webdav.password,
3081 + maxContentLength: Infinity,
3082 + maxBodyLength: Infinity
3083 + });
3084 + client.exists(webdavfolderName).then(function(a){
3085 + if(a){
3086 + performWebDavCleanup(client);
3087 + performWebDavUpload(client, filename);
3088 + }else{
3089 + client.createDirectory(webdavfolderName, {recursive: true}).then(function (a) {
3090 + if (func) { func('WebDAV folder created'); }
3091 performWebDavUpload(client, filename);
3096 - }
3092 + }).catch(function (err) {
3093 + if (func) { func('WebDAV (createDirectory) error: ' + err); }
3094 + });
3095 }
3098 - ).catch(function (err) {
3099 - if (func) { func('WebDAV (getDirectoryContents) error: ' + err); }
3096 + }).catch(function (err) {
3097 + if (func) { func('WebDAV (exists) error: ' + err); }
3098 });
3099 }
3100