Files
cms.uldp.edu.vn/utils/imageHelper.js

69 lines
2.1 KiB
JavaScript

/**
* Thêm BACKEND_URL vào đường dẫn hình ảnh
* @param {Object} data - Dữ liệu cần xử lý
* @returns {Object} - Dữ liệu đã được xử lý với đường dẫn hình ảnh đầy đủ
*/
function addBaseUrlToImages(data, baseUrl) {
// baseUrl can be passed explicitly (e.g., from req), otherwise fall back to env
const BACKEND_URL = baseUrl || process.env.BACKEND_URL || "";
// Tạo bản sao sâu để tránh thay đổi dữ liệu gốc
const processedData = JSON.parse(JSON.stringify(data));
// Hàm đệ quy để xử lý tất cả các URL hình ảnh trong đối tượng
const processObject = (obj) => {
if (!obj || typeof obj !== "object") return;
Object.keys(obj).forEach((key) => {
// Kiểm tra nếu thuộc tính chứa đường dẫn hình ảnh bắt đầu bằng /uploads/
if (typeof obj[key] === "string" && obj[key].startsWith("/uploads/")) {
// Thêm BACKEND_URL nếu đường dẫn chưa có http
if (!obj[key].startsWith("http")) {
obj[key] = `${BACKEND_URL}${obj[key]}`;
}
} else if (typeof obj[key] === "object") {
// Đệ quy xử lý các đối tượng và mảng lồng nhau
processObject(obj[key]);
}
});
};
processObject(processedData);
return processedData;
}
/**
* Tạo full URL cho ảnh từ đường dẫn tương đối - dùng cho EJS templates
* @param {string} imagePath - Đường dẫn ảnh
* @param {string} backendUrl - Backend URL (optional, sẽ lấy từ env nếu không có)
* @returns {string} - Full URL của ảnh
*/
function getFullImageUrl(imagePath, backendUrl = null) {
if (!imagePath) return "";
// Nếu đã là full URL thì return luôn
if (imagePath.startsWith("http")) {
return imagePath;
}
// Lấy backend URL
const baseUrl = (
backendUrl ||
process.env.BACKEND_URL ||
"http://localhost:3001"
).replace(/\/$/, "");
// Xử lý đường dẫn
let imgSrc = imagePath;
if (!imgSrc.startsWith("/")) {
imgSrc = "/" + imgSrc;
}
return baseUrl + imgSrc;
}
module.exports = {
addBaseUrlToImages,
getFullImageUrl,
};