🗃️ fix: Only Unlink Temp files on Error for Firebase File Uploads (#9152)

This commit is contained in:
Danny Avila 2025-08-19 12:05:27 -04:00 committed by GitHub
parent cee0579e0e
commit 3394aa5030
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2,10 +2,10 @@ const fs = require('fs');
const path = require('path');
const axios = require('axios');
const fetch = require('node-fetch');
const { logger } = require('@librechat/data-schemas');
const { ref, uploadBytes, getDownloadURL, deleteObject } = require('firebase/storage');
const { getBufferMetadata } = require('~/server/utils');
const { getFirebaseStorage } = require('./initialize');
const { logger } = require('~/config');
/**
* Deletes a file from Firebase Storage.
@ -145,7 +145,10 @@ function extractFirebaseFilePath(urlString) {
}
return '';
} catch (error) {
} catch {
logger.debug(
'[extractFirebaseFilePath] Failed to extract Firebase file path from URL, returning empty string',
);
// If URL parsing fails, return an empty string
return '';
}
@ -211,14 +214,24 @@ async function uploadFileToFirebase({ req, file, file_id }) {
const inputBuffer = await fs.promises.readFile(inputFilePath);
const bytes = Buffer.byteLength(inputBuffer);
const userId = req.user.id;
const fileName = `${file_id}__${path.basename(inputFilePath)}`;
const downloadURL = await saveBufferToFirebase({ userId, buffer: inputBuffer, fileName });
await fs.promises.unlink(inputFilePath);
return { filepath: downloadURL, bytes };
try {
const downloadURL = await saveBufferToFirebase({ userId, buffer: inputBuffer, fileName });
return { filepath: downloadURL, bytes };
} catch (err) {
logger.error('[uploadFileToFirebase] Error saving file buffer to Firebase:', err);
try {
if (file && file.path) {
await fs.promises.unlink(file.path);
}
} catch (unlinkError) {
logger.error(
'[uploadFileToFirebase] Error deleting temporary file, likely already deleted:',
unlinkError.message,
);
}
throw err;
}
}
/**