diff --git a/.changeset/ready-roses-shave.md b/.changeset/ready-roses-shave.md new file mode 100644 index 000000000000..aa582a2ba2b4 --- /dev/null +++ b/.changeset/ready-roses-shave.md @@ -0,0 +1,7 @@ +--- +"@gradio/image": patch +"@gradio/utils": patch +"gradio": patch +--- + +fix:Fix `Share to community` button for images diff --git a/js/image/shared/ImagePreview.svelte b/js/image/shared/ImagePreview.svelte index 27570e65b060..cb2d9abc7c03 100644 --- a/js/image/shared/ImagePreview.svelte +++ b/js/image/shared/ImagePreview.svelte @@ -54,7 +54,7 @@ on:error formatter={async (value) => { if (!value) return ""; - let url = await uploadToHuggingFace(value, "base64"); + let url = await uploadToHuggingFace(value, "url"); return ``; }} {value} diff --git a/js/utils/src/utils.ts b/js/utils/src/utils.ts index 66cf51032005..362b813de29a 100644 --- a/js/utils/src/utils.ts +++ b/js/utils/src/utils.ts @@ -31,7 +31,7 @@ export class ShareError extends Error { } export async function uploadToHuggingFace( - data: string, + data: string | { url?: string; path?: string }, type: "base64" | "url" ): Promise { if (window.__gradio_space__ == null) { @@ -41,14 +41,34 @@ export async function uploadToHuggingFace( let contentType: string; let filename: string; if (type === "url") { - const response = await fetch(data); + let url: string; + + if (typeof data === "object" && data.url) { + url = data.url; + } else if (typeof data === "string") { + url = data; + } else { + throw new Error("Invalid data format for URL type"); + } + + const response = await fetch(url); blob = await response.blob(); contentType = response.headers.get("content-type") || ""; filename = response.headers.get("content-disposition") || ""; } else { - blob = dataURLtoBlob(data); - contentType = data.split(";")[0].split(":")[1]; - filename = "file" + contentType.split("/")[1]; + let dataurl: string; + + if (typeof data === "object" && data.path) { + dataurl = data.path; + } else if (typeof data === "string") { + dataurl = data; + } else { + throw new Error("Invalid data format for base64 type"); + } + + blob = dataURLtoBlob(dataurl); + contentType = dataurl.split(";")[0].split(":")[1]; + filename = "file." + contentType.split("/")[1]; } const file = new File([blob], filename, { type: contentType });