From c7ed88b2d8a6e195a3b9dc4f6ff7031193f730b9 Mon Sep 17 00:00:00 2001 From: admin <572701190@qq.com> Date: Tue, 19 May 2026 23:39:50 +0800 Subject: [PATCH] use resume title for pdf download filename --- scripts/patch-reactive-resume-filename.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/scripts/patch-reactive-resume-filename.sh b/scripts/patch-reactive-resume-filename.sh index 2db633e..c852411 100755 --- a/scripts/patch-reactive-resume-filename.sh +++ b/scripts/patch-reactive-resume-filename.sh @@ -9,8 +9,7 @@ set -eu PUBLIC_FILE="/app/apps/web/.output/public/assets/file-D5WsIgJH.js" SSR_FILE="/app/apps/web/.output/server/_ssr/pdf-document-COfeOLVC.mjs" SERVER_INDEX_FILE="/app/apps/web/.output/server/index.mjs" -PDF_FILENAME="ZhiboWang-Resume.pdf" -CACHE_BUST="rr-filename-20260519" +CACHE_BUST="rr-filename-title-20260519" cp "$PUBLIC_FILE" "$PUBLIC_FILE.bak-filename" 2>/dev/null || true cp "$SSR_FILE" "$SSR_FILE.bak-filename" 2>/dev/null || true @@ -23,8 +22,7 @@ const crypto = require('crypto'); const publicFile = '/app/apps/web/.output/public/assets/file-D5WsIgJH.js'; const ssrFile = '/app/apps/web/.output/server/_ssr/pdf-document-COfeOLVC.mjs'; const serverIndexFile = '/app/apps/web/.output/server/index.mjs'; -const pdfFilename = 'ZhiboWang-Resume.pdf'; -const cacheBust = 'rr-filename-20260519'; +const cacheBust = 'rr-filename-title-20260519'; function makeEtag(buffer) { const digest = crypto.createHash('sha1').update(buffer).digest('base64').replace(/=+$/g, ''); @@ -68,8 +66,10 @@ function patchPublicImporters() { return files; } +const publicFilenameFunction = 'function t(e,t){let n=(e||"resume").toString().trim()||"resume";return n=n.replace(/[\\\\/:*?"<>|]/g,"-").replace(/\\s+/g," ").replace(/\\.+$/,"").trim()||"resume",t&&n.toLowerCase().endsWith("."+t.toLowerCase())?n:`${n}${t?`.${t}`:""}`}'; + let publicJs = fs.readFileSync(publicFile, 'utf8'); -const publicReplacement = `function t(e,t){if(t==="pdf")return"${pdfFilename}";let n=(e||"resume").toString().trim()||"resume";return\`\${n}\${t?\`.\${t}\`:""}\`}`; +const publicReplacement = publicFilenameFunction; if (!publicJs.includes(publicReplacement)) { const start = publicJs.indexOf('function t('); const end = publicJs.indexOf('function n(', start); @@ -79,7 +79,11 @@ if (!publicJs.includes(publicReplacement)) { fs.writeFileSync(publicFile, publicJs); let ssr = fs.readFileSync(ssrFile, 'utf8'); -const ssrReplacement = `function generateFilename(prefix, extension) {\n\tif (extension === "pdf") return "${pdfFilename}";\n\tconst filename = (prefix || "resume").toString().trim() || "resume";\n\treturn \`\${filename}\${extension ? \`.\${extension}\` : ""}\`;\n}`; +ssr = ssr.replace( + /\n\t\tname: "",\n\t\tdata: \{/, + '\n\t\tname: resume.name,\n\t\tdata: {', +); +const ssrReplacement = `function generateFilename(prefix, extension) {\n\tlet filename = (prefix || "resume").toString().trim() || "resume";\n\tfilename = filename.replace(/[\\\\/:*?"<>|]/g, "-").replace(/\\s+/g, " ").replace(/\\.+$/, "").trim() || "resume";\n\treturn extension && filename.toLowerCase().endsWith(\`.\${extension.toLowerCase()}\`) ? filename : \`\${filename}\${extension ? \`.\${extension}\` : ""}\`;\n}`; if (!ssr.includes(ssrReplacement)) { const start = ssr.indexOf('function generateFilename('); const end = ssr.indexOf('\nfunction downloadWithAnchor(', start);