Spaces:
Paused
Paused
import type { UploadResponse } from "./types"; | |
import type { Client } from "./client"; | |
export async function upload( | |
this: Client, | |
file_data: FileData[], | |
root_url: string, | |
upload_id?: string, | |
max_file_size?: number | |
): Promise<(FileData | null)[] | null> { | |
let files = (Array.isArray(file_data) ? file_data : [file_data]).map( | |
(file_data) => file_data.blob! | |
); | |
const oversized_files = files.filter( | |
(f) => f.size > (max_file_size ?? Infinity) | |
); | |
if (oversized_files.length) { | |
throw new Error( | |
`File size exceeds the maximum allowed size of ${max_file_size} bytes: ${oversized_files | |
.map((f) => f.name) | |
.join(", ")}` | |
); | |
} | |
return await Promise.all( | |
await this.upload_files(root_url, files, upload_id).then( | |
async (response: { files?: string[]; error?: string }) => { | |
if (response.error) { | |
throw new Error(response.error); | |
} else { | |
if (response.files) { | |
return response.files.map((f, i) => { | |
const file = new FileData({ | |
...file_data[i], | |
path: f, | |
url: root_url + "/file=" + f | |
}); | |
return file; | |
}); | |
} | |
return []; | |
} | |
} | |
) | |
); | |
} | |
export async function prepare_files( | |
files: File[], | |
is_stream?: boolean | |
): Promise<FileData[]> { | |
return files.map( | |
(f) => | |
new FileData({ | |
path: f.name, | |
orig_name: f.name, | |
blob: f, | |
size: f.size, | |
mime_type: f.type, | |
is_stream | |
}) | |
); | |
} | |
export class FileData { | |
path: string; | |
url?: string; | |
orig_name?: string; | |
size?: number; | |
blob?: File; | |
is_stream?: boolean; | |
mime_type?: string; | |
alt_text?: string; | |
readonly meta = { _type: "gradio.FileData" }; | |
constructor({ | |
path, | |
url, | |
orig_name, | |
size, | |
blob, | |
is_stream, | |
mime_type, | |
alt_text | |
}: { | |
path: string; | |
url?: string; | |
orig_name?: string; | |
size?: number; | |
blob?: File; | |
is_stream?: boolean; | |
mime_type?: string; | |
alt_text?: string; | |
}) { | |
this.path = path; | |
this.url = url; | |
this.orig_name = orig_name; | |
this.size = size; | |
this.blob = url ? undefined : blob; | |
this.is_stream = is_stream; | |
this.mime_type = mime_type; | |
this.alt_text = alt_text; | |
} | |
} | |