This commit is contained in:
hosseintaromi 2025-12-19 23:54:34 +03:30
parent 30f1e4768a
commit 2fe019ec66
3 changed files with 108 additions and 108 deletions

View File

@ -67,7 +67,6 @@ export const API_ROUTES = {
// Files APIs
GET_FILES: "files",
UPLOAD_FILE: "files",
UPLOAD_USER_FILE: "api/v1/users/files",
GET_FILE: (id: string) => `files/${id}`,
UPDATE_FILE: (id: string) => `files/${id}`,
DELETE_FILE: (id: string) => `files/${id}`,

View File

@ -21,13 +21,20 @@ interface UploadResponse {
export const useFileUpload = () => {
return useMutation({
mutationFn: async (file: File): Promise<{ id: string; url: string; mimeType?: string }> => {
const contentType =
file.type && file.type.startsWith("video") ? "video/mp4" : "image/png";
const formData = new FormData();
formData.append("file", file);
formData.append("name", "uploaded-file");
console.log("Uploading file:", file.name);
const response = await httpPostRequest<UploadResponse>(
APIUrlGenerator(API_ROUTES.UPLOAD_USER_FILE, undefined, undefined, false),
file,
{ headers: { "Content-Type": contentType, Accept: "application/json" } }
APIUrlGenerator(API_ROUTES.UPLOAD_FILE),
formData,
{
headers: {
"Content-Type": "multipart/form-data",
},
}
);
console.log("Upload response:", response);

View File

@ -61,7 +61,7 @@ const toPublicUrl = (img: any): ProductImage => {
};
const IMAGE_MAX_SIZE = 2 * 1024 * 1024;
const VIDEO_MAX_SIZE = 50 * 1024 * 1024;
const VIDEO_MAX_SIZE = 25 * 1024 * 1024;
const isImageFile = (file: File) => file.type?.startsWith('image/');
const isVideoFile = (file: File) => file.type?.startsWith('video/');
@ -104,16 +104,10 @@ const validateMediaFile = async (file: File, options?: { requireSquare?: boolean
const validateExplorerFile = async (file: File) => {
if (isImageFile(file)) {
if (file.size > IMAGE_MAX_SIZE) {
throw new Error('حجم تصویر نباید بیشتر از ۲ مگابایت باشد');
}
await ensureSquareImage(file);
return;
}
if (isVideoFile(file)) {
if (file.size > VIDEO_MAX_SIZE) {
throw new Error('حجم ویدیو نباید بیشتر از ۵۰ مگابایت باشد');
}
return;
}
throw new Error('فقط تصاویر یا ویدیو مجاز است');
@ -612,11 +606,11 @@ const ProductFormPage = () => {
onUpload={handleFileUpload}
onRemove={handleFileRemove}
acceptedTypes={['image/*', 'video/*']}
maxFileSize={50 * 1024 * 1024}
maxFileSize={25 * 1024 * 1024}
maxFiles={10}
mode="multi"
label=""
description="تصاویر یا ویدیوهای محصول را آپلود کنید (حداکثر ۲ مگ برای تصویر و ۵۰ مگ برای ویدیو)"
description="تصاویر یا ویدیوهای محصول را آپلود کنید (حداکثر ۲ مگ برای تصویر و ۲۵ مگ برای ویدیو)"
onUploadStart={() => setIsUploading(true)}
onUploadComplete={() => setIsUploading(false)}
/>
@ -673,11 +667,11 @@ const ProductFormPage = () => {
onUpload={handleExplorerUpload}
onRemove={handleExplorerRemove}
acceptedTypes={['image/*', 'video/*']}
maxFileSize={50 * 1024 * 1024}
maxFileSize={0}
maxFiles={5}
mode="multi"
label=""
description="فایل‌های Explorer را آپلود کنید (تصویر: ۲ مگ، ویدیو: ۵۰ مگ، تصاویر باید مربعی باشند)"
description="فایل‌های Explorer را آپلود کنید (تصاویر باید مربعی باشند)"
onUploadStart={() => setIsExplorerUploading(true)}
onUploadComplete={() => setIsExplorerUploading(false)}
/>