Implement image upload functionality with temporary storage and cleanup. Update chat and broadcast logic to handle image URLs instead of base64 data, enhancing performance and user experience. Modify .gitignore to exclude temporary files and uploads directory.

This commit is contained in:
Torsten Schulz (local)
2025-12-05 10:43:27 +01:00
parent 840504e440
commit 6d922fbf9f
5 changed files with 245 additions and 36 deletions

View File

@@ -249,17 +249,23 @@ export function setupBroadcast(io) {
socket.emit('connected', connectedData);
socket.on('disconnect', (reason) => {
console.log(`[Disconnect] Socket getrennt für Session-ID: ${sessionId}, Grund: ${reason}`);
const client = clients.get(sessionId);
if (client) {
console.log(`[Disconnect] Client gefunden: ${client.userName || 'unbekannt'}, Socket war verbunden: ${client.socket ? client.socket.connected : 'null'}`);
// Setze Socket auf null, damit keine Nachrichten mehr an diesen Client gesendet werden
// ABER: Lösche den Client NICHT, damit die Session beim Reload wiederhergestellt werden kann
client.socket = null;
// Aktualisiere Benutzerliste, damit andere Clients sehen, dass dieser Benutzer offline ist
if (client.userName) {
console.log(`[Disconnect] Aktualisiere Benutzerliste nach Disconnect von ${client.userName}`);
broadcastUserList();
}
// Client bleibt in der Map, damit Session-Wiederherstellung funktioniert
} else {
console.log(`[Disconnect] Kein Client gefunden für Session-ID: ${sessionId}`);
}
});
@@ -569,7 +575,7 @@ export function setupBroadcast(io) {
return;
}
const { toUserName, message, messageId, isImage, imageType } = data;
const { toUserName, message, messageId, isImage, imageType, imageUrl } = data;
if (!toUserName) {
socket.emit('error', { message: 'Empfänger fehlt' });
@@ -615,36 +621,63 @@ export function setupBroadcast(io) {
conversation.push({
from: client.userName,
to: toUserName,
message,
message: isImage && imageUrl ? imageUrl : message, // Verwende URL für Bilder
messageId,
timestamp: new Date().toISOString(),
read: false,
isImage: isImage || false,
imageType: imageType || null
imageType: imageType || null,
imageUrl: imageUrl || null,
imageCode: isImage ? message : null
});
// Sende an Empfänger (wenn online)
const messagePayload = {
from: client.userName,
message,
message: isImage && imageUrl ? imageUrl : message, // Verwende URL für Bilder
messageId,
timestamp: new Date().toISOString(),
isImage: isImage || false,
imageType: imageType || null
imageType: imageType || null,
imageUrl: imageUrl || null,
imageCode: isImage ? message : null // Code für Server-Referenz
};
// Debug-Logging für Bilder
if (isImage) {
console.log(`[Bild] Sende Bild von ${client.userName} an ${toUserName}, Größe: ${message ? message.length : 0} Zeichen, Typ: ${imageType || 'unbekannt'}`);
console.log(`[Bild] Absender Socket verbunden: ${socket.connected}, Empfänger Socket verbunden: ${receiver.socket ? receiver.socket.connected : 'null'}`);
}
receiver.socket.emit('message', messagePayload);
// Prüfe, ob Absender noch verbunden ist
if (!socket.connected) {
console.error(`[Bild] Absender ${client.userName} Socket nicht mehr verbunden beim Senden!`);
return;
}
// Bestätigung an Absender
socket.emit('messageSent', {
messageId,
to: toUserName
});
// Prüfe, ob Empfänger-Socket noch existiert und verbunden ist
if (!receiver.socket || !receiver.socket.connected) {
console.error(`[Bild] Empfänger ${toUserName} Socket nicht mehr verbunden beim Senden!`);
socket.emit('error', { message: 'Empfänger ist nicht mehr online' });
return;
}
try {
receiver.socket.emit('message', messagePayload);
// Bestätigung an Absender (nur wenn noch verbunden)
if (socket.connected) {
socket.emit('messageSent', {
messageId,
to: toUserName
});
}
} catch (error) {
console.error(`[Bild] Fehler beim Senden der Nachricht:`, error);
if (socket.connected) {
socket.emit('error', { message: 'Fehler beim Senden der Nachricht' });
}
}
// Aktualisiere ungelesene Nachrichten für den Empfänger
updateUnreadCount(receiver);