Spaces:
Paused
Paused
import type { Client } from ".."; | |
import { BROKEN_CONNECTION_MSG, UPLOAD_URL } from "../constants"; | |
import type { UploadResponse } from "../types"; | |
export async function upload_files( | |
this: Client, | |
root_url: string, | |
files: (Blob | File)[], | |
upload_id?: string | |
): Promise<UploadResponse> { | |
const headers: { | |
Authorization?: string; | |
} = {}; | |
if (this?.options?.hf_token) { | |
headers.Authorization = `Bearer ${this.options.hf_token}`; | |
} | |
const chunkSize = 1000; | |
const uploadResponses = []; | |
let response: Response; | |
for (let i = 0; i < files.length; i += chunkSize) { | |
const chunk = files.slice(i, i + chunkSize); | |
const formData = new FormData(); | |
chunk.forEach((file) => { | |
formData.append("files", file); | |
}); | |
try { | |
const upload_url = upload_id | |
? `${root_url}/${UPLOAD_URL}?upload_id=${upload_id}` | |
: `${root_url}/${UPLOAD_URL}`; | |
response = await this.fetch(upload_url, { | |
method: "POST", | |
body: formData, | |
headers, | |
credentials: "include" | |
}); | |
} catch (e) { | |
throw new Error(BROKEN_CONNECTION_MSG + (e as Error).message); | |
} | |
if (!response.ok) { | |
const error_text = await response.text(); | |
return { error: `HTTP ${response.status}: ${error_text}` }; | |
} | |
const output: UploadResponse["files"] = await response.json(); | |
if (output) { | |
uploadResponses.push(...output); | |
} | |
} | |
return { files: uploadResponses }; | |
} | |