fix: files Tabelle nutzt originalname/mimetype/filename statt name/mime_type/path

This commit is contained in:
2026-06-13 13:00:52 +02:00
parent 355ead1e94
commit 617946893f
2 changed files with 7 additions and 7 deletions

View File

@@ -11,7 +11,7 @@ const UPLOAD_DIR = process.env.UPLOAD_DIR || '/data/uploads';
function getShare(token) { function getShare(token) {
return db.prepare(` return db.prepare(`
SELECT s.*, SELECT s.*,
f.name as file_name, f.size as file_size, f.mime_type, f.path as file_path, f.originalname as file_name, f.size as file_size, f.mimetype as mime_type, f.filename as file_path,
fo.name as folder_name fo.name as folder_name
FROM public_file_shares s FROM public_file_shares s
LEFT JOIN files f ON f.id = s.file_id LEFT JOIN files f ON f.id = s.file_id
@@ -64,7 +64,7 @@ router.post('/:token/folder', async (req, res) => {
const ok = await bcrypt.compare(req.body?.password || '', s.password_hash); const ok = await bcrypt.compare(req.body?.password || '', s.password_hash);
if (!ok) return res.status(403).json({ error: 'Falsches Passwort' }); if (!ok) return res.status(403).json({ error: 'Falsches Passwort' });
const files = db.prepare(` const files = db.prepare(`
SELECT id, name, size, mime_type FROM files SELECT id, originalname as name, size, mimetype as mime_type, filename as file_path FROM files
WHERE folder_id=? AND user_id=? ORDER BY name WHERE folder_id=? AND user_id=? ORDER BY name
`).all(s.folder_id, s.user_id); `).all(s.folder_id, s.user_id);
db.prepare('UPDATE public_file_shares SET download_count = download_count + 1 WHERE id=?').run(s.id); db.prepare('UPDATE public_file_shares SET download_count = download_count + 1 WHERE id=?').run(s.id);
@@ -81,10 +81,10 @@ router.post('/:token/folder/:fileId', async (req, res) => {
const file = db.prepare('SELECT * FROM files WHERE id=? AND folder_id=? AND user_id=?') const file = db.prepare('SELECT * FROM files WHERE id=? AND folder_id=? AND user_id=?')
.get(req.params.fileId, s.folder_id, s.user_id); .get(req.params.fileId, s.folder_id, s.user_id);
if (!file) return res.status(404).json({ error: 'Datei nicht gefunden' }); if (!file) return res.status(404).json({ error: 'Datei nicht gefunden' });
const filePath = path.join(UPLOAD_DIR, file.path); const filePath = path.join(UPLOAD_DIR, file.file_path || file.filename);
if (!fs.existsSync(filePath)) return res.status(404).json({ error: 'Datei nicht gefunden' }); if (!fs.existsSync(filePath)) return res.status(404).json({ error: 'Datei nicht gefunden' });
res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(file.name)}"`); res.setHeader('Content-Disposition', `attachment; filename="${encodeURIComponent(file.name || file.originalname)}"`);
res.setHeader('Content-Type', file.mime_type || 'application/octet-stream'); res.setHeader('Content-Type', file.mime_type || file.mimetype || 'application/octet-stream');
fs.createReadStream(filePath).pipe(res); fs.createReadStream(filePath).pipe(res);
}); });

View File

@@ -14,7 +14,7 @@ router.get('/', authenticate, (req, res) => {
const shares = db.prepare(` const shares = db.prepare(`
SELECT s.id, s.token, s.user_id, s.file_id, s.folder_id, s.label, SELECT s.id, s.token, s.user_id, s.file_id, s.folder_id, s.label,
s.password_hash, s.expires_at, s.created_at, s.download_count, s.password_hash, s.expires_at, s.created_at, s.download_count,
f.name as file_name, f.size as file_size, f.originalname as file_name, f.size as file_size,
fo.name as folder_name fo.name as folder_name
FROM public_file_shares s FROM public_file_shares s
LEFT JOIN files f ON f.id = s.file_id LEFT JOIN files f ON f.id = s.file_id
@@ -77,7 +77,7 @@ router.get('/debug-table', (req, res) => {
let publicTest = null; let publicTest = null;
if (sample.length > 0) { if (sample.length > 0) {
const t = sample[0].token; const t = sample[0].token;
const s = db.prepare('SELECT s.*, f.name as file_name, fo.name as folder_name FROM public_file_shares s LEFT JOIN files f ON f.id = s.file_id LEFT JOIN folders fo ON fo.id = s.folder_id WHERE s.token=?').get(t); const s = db.prepare('SELECT s.*, f.originalname as file_name, fo.name as folder_name FROM public_file_shares s LEFT JOIN files f ON f.id = s.file_id LEFT JOIN folders fo ON fo.id = s.folder_id WHERE s.token=?').get(t);
const now = Math.floor(Date.now()/1000); const now = Math.floor(Date.now()/1000);
publicTest = { token: t, expires_at: s?.expires_at, now, isExpired: s?.expires_at < now, typeof_expires: typeof s?.expires_at }; publicTest = { token: t, expires_at: s?.expires_at, now, isExpired: s?.expires_at < now, typeof_expires: typeof s?.expires_at };
} }