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 });