修改一些bug
This commit is contained in:
@@ -205,37 +205,6 @@ export default function Home() {
|
||||
}
|
||||
};
|
||||
|
||||
const triggerBrowserDownload = async (
|
||||
downloadUrl: string,
|
||||
filename?: string
|
||||
) => {
|
||||
try {
|
||||
const response = await fetch(downloadUrl, {
|
||||
mode: "cors",
|
||||
credentials: "omit",
|
||||
});
|
||||
if (!response.ok) {
|
||||
throw new Error(`文件获取失败,状态码 ${response.status.toString()}`);
|
||||
}
|
||||
const blob = await response.blob();
|
||||
const objectUrl = URL.createObjectURL(blob);
|
||||
const anchor = document.createElement("a");
|
||||
anchor.href = objectUrl;
|
||||
anchor.download = filename ?? "download";
|
||||
anchor.rel = "noopener";
|
||||
anchor.style.display = "none";
|
||||
document.body.appendChild(anchor);
|
||||
anchor.click();
|
||||
document.body.removeChild(anchor);
|
||||
URL.revokeObjectURL(objectUrl);
|
||||
} catch (error) {
|
||||
const message =
|
||||
error instanceof Error ? error.message : "无法保存文件,请重试。";
|
||||
// 仅在控制台输出,避免覆盖成功状态。用户可重新触发下载。
|
||||
console.error("[download]", message);
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<main className="min-h-screen bg-gradient-to-br from-zinc-50 via-white to-zinc-100 py-16 px-4 font-sans text-zinc-900 dark:from-black dark:via-zinc-950 dark:to-black dark:text-zinc-100">
|
||||
<div className="mx-auto flex w-full max-w-4xl flex-col gap-8">
|
||||
@@ -245,7 +214,7 @@ export default function Home() {
|
||||
Video Fetcher
|
||||
</span>
|
||||
<h1 className="text-3xl font-semibold tracking-tight md:text-4xl">
|
||||
高可用视频下载服务
|
||||
YTB视频下载服务
|
||||
</h1>
|
||||
<p className="max-w-2xl text-base text-zinc-600 dark:text-zinc-400">
|
||||
输入任意公共视频链接。系统将列出可用清晰度与格式,支持一键最佳质量下载或按需选择单独下载。
|
||||
@@ -329,18 +298,14 @@ export default function Home() {
|
||||
</span>
|
||||
<span>自动采用服务推荐的最佳格式,适合快速下载。</span>
|
||||
{downloads[DEFAULT_DOWNLOAD_KEY]?.status === "success" ? (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
void triggerBrowserDownload(
|
||||
downloads[DEFAULT_DOWNLOAD_KEY].url,
|
||||
downloads[DEFAULT_DOWNLOAD_KEY].file
|
||||
);
|
||||
}}
|
||||
className="w-fit text-left text-sm font-medium text-zinc-900 underline underline-offset-4 transition hover:text-zinc-700 dark:text-zinc-200 dark:hover:text-zinc-50"
|
||||
<a
|
||||
href={downloads[DEFAULT_DOWNLOAD_KEY].url}
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
className="w-fit truncate text-left text-sm font-medium text-zinc-900 underline underline-offset-4 transition hover:text-zinc-700 dark:text-zinc-200 dark:hover:text-zinc-50"
|
||||
>
|
||||
{downloads[DEFAULT_DOWNLOAD_KEY].file}
|
||||
</button>
|
||||
</a>
|
||||
) : null}
|
||||
{downloads[DEFAULT_DOWNLOAD_KEY]?.status === "error" ? (
|
||||
<span className="text-sm text-red-500">
|
||||
@@ -450,18 +415,14 @@ export default function Home() {
|
||||
: "下载"}
|
||||
</button>
|
||||
{downloadState.status === "success" ? (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
void triggerBrowserDownload(
|
||||
downloadState.url,
|
||||
downloadState.file
|
||||
);
|
||||
}}
|
||||
<a
|
||||
href={downloadState.url}
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
className="truncate text-left text-xs font-medium text-zinc-900 underline underline-offset-4 transition hover:text-zinc-700 dark:text-zinc-200 dark:hover:text-zinc-50"
|
||||
>
|
||||
{downloadState.file}
|
||||
</button>
|
||||
</a>
|
||||
) : null}
|
||||
{downloadState.status === "error" ? (
|
||||
<span className="text-xs text-red-500">
|
||||
|
||||
Reference in New Issue
Block a user