126 lines
3.1 KiB
JavaScript
126 lines
3.1 KiB
JavaScript
import { SendRequest } from '../components/Global/ApiRequest';
|
|
import axios from 'axios';
|
|
|
|
const API_BASE_URL = import.meta.env.VITE_API_SERVER;
|
|
|
|
// Get file from uploads directory
|
|
const getFile = async (folder, filename) => {
|
|
const response = await axios.get(`${API_BASE_URL}/file-uploads/${folder}/${encodeURIComponent(filename)}`, {
|
|
responseType: 'blob'
|
|
});
|
|
return response.data;
|
|
};
|
|
|
|
// Download file as blob with proper handling
|
|
const downloadFile = async (folder, filename) => {
|
|
try {
|
|
const response = await getFile(folder, filename);
|
|
|
|
const blob = new Blob([response], {
|
|
type: 'application/octet-stream'
|
|
});
|
|
const url = window.URL.createObjectURL(blob);
|
|
|
|
const link = document.createElement('a');
|
|
link.href = url;
|
|
link.download = filename;
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
|
|
document.body.removeChild(link);
|
|
window.URL.revokeObjectURL(url);
|
|
|
|
return { success: true, filename };
|
|
} catch (error) {
|
|
console.error('Error downloading file:', error);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
// Get file info (metadata)
|
|
const getFileInfo = async (folder, filename) => {
|
|
const response = await SendRequest({
|
|
method: 'head',
|
|
prefix: `file-uploads/${folder}/${encodeURIComponent(filename)}`
|
|
});
|
|
|
|
if (response.error) {
|
|
throw new Error(response.message);
|
|
}
|
|
|
|
return {
|
|
contentType: response.headers?.['content-type'],
|
|
contentLength: response.headers?.['content-length'],
|
|
lastModified: response.headers?.['last-modified'],
|
|
filename: filename,
|
|
folder: folder
|
|
};
|
|
};
|
|
|
|
// Get file URL for iframe
|
|
const getFileUrl = (folder, filename) => {
|
|
const token = localStorage.getItem('token');
|
|
if (token) {
|
|
return `${API_BASE_URL}/file-uploads/${folder}/${encodeURIComponent(filename)}?token=${encodeURIComponent(token)}`;
|
|
}
|
|
return `${API_BASE_URL}/file-uploads/${folder}/${encodeURIComponent(filename)}`;
|
|
};
|
|
|
|
// Check if file exists
|
|
const checkFileExists = async (folder, filename) => {
|
|
const response = await SendRequest({
|
|
method: 'head',
|
|
prefix: `file-uploads/${folder}/${encodeURIComponent(filename)}`
|
|
});
|
|
|
|
if (response.error && response.statusCode === 404) {
|
|
return false;
|
|
} else if (response.error) {
|
|
throw new Error(response.message);
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
const getFileType = (filename) => {
|
|
const ext = filename.split('.').pop().toLowerCase();
|
|
const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];
|
|
const pdfExtensions = ['pdf'];
|
|
|
|
if (imageExtensions.includes(ext)) {
|
|
return 'image';
|
|
} else if (pdfExtensions.includes(ext)) {
|
|
return 'pdf';
|
|
}
|
|
return 'unknown';
|
|
};
|
|
|
|
// Upload file to server
|
|
const uploadFile = async (file, folder) => {
|
|
const formData = new FormData();
|
|
formData.append('file', file);
|
|
formData.append('folder', folder);
|
|
|
|
const response = await SendRequest({
|
|
method: 'post',
|
|
prefix: 'file-uploads',
|
|
params: formData
|
|
});
|
|
|
|
return response.data;
|
|
};
|
|
|
|
const getFolderFromFileType = (fileType) => {
|
|
return fileType === 'pdf' ? 'pdf' : 'images';
|
|
};
|
|
|
|
export {
|
|
getFile,
|
|
downloadFile,
|
|
getFileInfo,
|
|
getFileUrl,
|
|
checkFileExists,
|
|
getFileType,
|
|
getFolderFromFileType,
|
|
uploadFile
|
|
}; |