IntelliClass_FE/api/file.ts
Timothy Yin 3a8b78ea7b
feat: update course resource types and interfaces, add resource uploader component
- Expanded CourseResourceType to include "resource" and "temp".
- Renamed ICourseResource to IResource and updated its properties for consistency.
- Introduced ICreateResource type for resource creation.
- Modified ICourseSection and ICourseChapter interfaces to use the new IResource type and updated property names for camelCase.
- Implemented uploadFile function in file API for handling file uploads.
- Created ResourceUploader component for uploading resources with validation and feedback.
- Developed Card component for displaying course class details and managing student enrollment.
- Added AlertDialog components for consistent alert dialog UI.
- Enhanced table components for better data presentation and management.
- Implemented preview page for displaying various resource types based on file extension.
2025-04-08 00:04:29 +08:00

37 lines
846 B
TypeScript

import type { IResponse } from ".";
const putFile = (file: File, url: string): Promise<string> => {
return new Promise((resolve, reject) => {
$fetch(url, {
method: "PUT",
body: file,
headers: {
"Content-Type": file.type,
},
})
.then(() => {
resolve(url.split("?")[0]);
})
.catch(() => {
reject(new Error("File upload failed"));
});
});
};
export const uploadFile = async (file: File, type: "resource" | "temp") => {
const signedUrl = await http<IResponse<{ data: string }>>(
`/common/oss/getSignUrl`,
{
method: "POST",
query: {
fileName: encodeURI(file.name),
fileType: type,
fileSize: file.size,
fileMime: file.type,
},
}
);
const url = signedUrl.data;
return await putFile(file, url);
};