mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 00:40:14 +01:00
- Enhanced the `saveImageFromUrl` function to dynamically handle file extensions based on the content type of the fetched image. - Replaced the method of appending a '.png' extension with a more robust approach using regular expressions and the path module. - Allows for correct extension replacement or addition, ensuring filename consistency and compatibility with the actual image format. - Prevents issues with double extensions (e.g., 'someimage.jpg.png') and aligns saved file types with their respective content types.
46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const axios = require('axios');
|
|
const { logger } = require('~/config');
|
|
|
|
async function saveImageFromUrl(url, outputPath, outputFilename) {
|
|
try {
|
|
// Fetch the image from the URL
|
|
const response = await axios({
|
|
url,
|
|
responseType: 'stream',
|
|
});
|
|
|
|
// Get the content type from the response headers
|
|
const contentType = response.headers['content-type'];
|
|
let extension = contentType.split('/').pop();
|
|
|
|
// Check if the output directory exists, if not, create it
|
|
if (!fs.existsSync(outputPath)) {
|
|
fs.mkdirSync(outputPath, { recursive: true });
|
|
}
|
|
|
|
// Replace or append the correct extension
|
|
const extRegExp = new RegExp(path.extname(outputFilename) + '$');
|
|
outputFilename = outputFilename.replace(extRegExp, `.${extension}`);
|
|
if (!path.extname(outputFilename)) {
|
|
outputFilename += `.${extension}`;
|
|
}
|
|
|
|
// Create a writable stream for the output path
|
|
const outputFilePath = path.join(outputPath, outputFilename);
|
|
const writer = fs.createWriteStream(outputFilePath);
|
|
|
|
// Pipe the response data to the output file
|
|
response.data.pipe(writer);
|
|
|
|
return new Promise((resolve, reject) => {
|
|
writer.on('finish', resolve);
|
|
writer.on('error', reject);
|
|
});
|
|
} catch (error) {
|
|
logger.error('[saveImageFromUrl] Error while saving the image:', error);
|
|
}
|
|
}
|
|
|
|
module.exports = saveImageFromUrl;
|