feat: WebDAV Sync mit vollständiger Ordnerstruktur (user/ordner/unterordner/datei)
This commit is contained in:
@@ -200,11 +200,30 @@ router.post('/', authenticate, (req, res) => {
|
||||
.run(uid, req.file.filename, req.file.originalname, req.file.mimetype||'application/octet-stream', req.file.size, folderId);
|
||||
const newFile = db.prepare('SELECT f.*,u.username as owner FROM files f JOIN users u ON u.id=f.user_id WHERE f.id=?').get(r.lastInsertRowid);
|
||||
|
||||
// WebDAV: Datei asynchron spiegeln (Fehler ignorieren, lokale Kopie bleibt)
|
||||
// WebDAV: Datei asynchron spiegeln mit Ordnerstruktur
|
||||
const cfg = webdav.getConfig();
|
||||
if (cfg.enabled) {
|
||||
const user = db.prepare('SELECT username FROM users WHERE id=?').get(uid);
|
||||
const davPath = webdav.userPath(cfg, user.username) + '/' + req.file.originalname;
|
||||
// Ordnerpfad auflösen
|
||||
function getFolderPath(fid) {
|
||||
if (!fid) return '';
|
||||
const parts = [];
|
||||
let cur = fid;
|
||||
const seen = new Set();
|
||||
while (cur) {
|
||||
if (seen.has(cur)) break; seen.add(cur);
|
||||
const fo = db.prepare('SELECT name, parent_id FROM folders WHERE id=?').get(cur);
|
||||
if (!fo) break;
|
||||
parts.unshift(fo.name.replace(/[/\\]/g, '_'));
|
||||
cur = fo.parent_id;
|
||||
}
|
||||
return parts.join('/');
|
||||
}
|
||||
const folderPath = getFolderPath(folderId);
|
||||
const userBase = webdav.userPath(cfg, user.username);
|
||||
const davPath = folderPath
|
||||
? `${userBase}/${folderPath}/${req.file.originalname}`
|
||||
: `${userBase}/${req.file.originalname}`;
|
||||
fs.readFile(path.join(UPLOAD_DIR, req.file.filename), (err, buf) => {
|
||||
if (!err) webdav.uploadFile(buf, davPath, req.file.mimetype).catch(e => console.error('[webdav upload]', e.message));
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user