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