Files
SeeyonFileSystem/web/src/api/file.ts

186 lines
3.9 KiB
TypeScript
Raw Normal View History

2026-07-03 15:58:29 +08:00
/**
* API
*/
import request from './request'
/** 文件信息 */
export interface FileInfo {
id: number
name: string
extension: string
folder_id: number
size: number
mime_type: string
is_favorite: number
download_count: number
created_at: string
updated_at: string
}
/** 文件夹信息 */
export interface FolderInfo {
id: number
name: string
parent_id: number
path: string
created_at: string
updated_at: string
}
/** 文件列表响应 */
export interface FileListResult {
folders: FolderInfo[]
files: FileInfo[]
}
/** 分享信息 */
export interface ShareInfo {
id: number
share_code: string
share_url: string
has_password: boolean
expire_at: string | null
max_download: number
download_count: number
created_at: string
}
/**
*
* @param file
* @param folderId ID, 0=
*/
export function uploadFile(file: File, folderId: number = 0) {
const formData = new FormData()
formData.append('file', file)
return request.post<any, { data: FileInfo }>(`/file/upload?folder_id=${folderId}`, formData, {
headers: { 'Content-Type': 'multipart/form-data' },
})
}
/**
* (+)
*/
export function getFolderChildren(folderId: number | string) {
return request.get<any, { data: FileListResult }>(`/folder/${folderId}/children`)
}
/**
*
*/
export function createFolder(name: string, parentId: number = 0) {
return request.post('/folder', { name, parent_id: parentId })
}
/**
*
*/
export function renameFile(fileId: number, newName: string) {
return request.put(`/file/${fileId}/rename`, { new_name: newName })
}
/**
*
*/
export function renameFolder(folderId: number, newName: string) {
return request.put(`/folder/${folderId}/rename`, { new_name: newName })
}
/**
* ()
*/
export function deleteFile(fileId: number) {
return request.delete(`/file/${fileId}`)
}
/**
* ()
*/
export function deleteFolder(folderId: number) {
return request.delete(`/folder/${folderId}`)
}
/**
*
*/
export function moveFile(fileId: number, targetFolderId: number) {
return request.post(`/file/${fileId}/move`, { target_folder_id: targetFolderId })
}
/**
*
*/
export function searchFiles(keyword: string) {
return request.get<any, { data: FileInfo[] }>('/file/search', { params: { keyword } })
}
/**
*
*/
export function getTrash() {
return request.get<any, { data: FileInfo[] }>('/file/trash')
}
/**
*
*/
export function restoreFile(fileId: number) {
return request.post(`/file/${fileId}/restore`)
}
/**
*
*/
export function permanentDeleteFile(fileId: number) {
return request.delete(`/file/${fileId}/permanent`)
}
/**
*
*/
export function getDownloadUrl(fileId: number): string {
return `/api/file/${fileId}/download`
}
/**
*
*/
export function createShare(fileId: number, password?: string, expireHours?: number, maxDownload?: number, allowPreview?: number, allowDownload?: number) {
return request.post<any, { data: ShareInfo }>('/share', {
file_id: fileId,
password,
expire_hours: expireHours,
max_download: maxDownload,
allow_preview: allowPreview,
allow_download: allowDownload,
})
}
/**
*
*/
export function getMyShares() {
return request.get<any, { data: ShareInfo[] }>('/share')
}
/**
*
*/
export function cancelShare(shareId: number) {
return request.delete(`/share/${shareId}`)
}
/**
* ()
*/
export function getShareInfo(code: string) {
return request.get(`/s/${code}`)
}
/**
*
*/
export function verifySharePassword(code: string, password: string) {
return request.post(`/s/${code}/verify`, { password })
}