fix: 修复客户端无法打开工作报告

This commit is contained in:
kuaifan 2025-06-02 10:18:55 +08:00
parent 678868153a
commit 5a1f130bec
3 changed files with 9 additions and 91 deletions

View File

@ -58,17 +58,8 @@ const electronMenu = {
},
async saveImageAs(url, params) {
let extension = '';
if (utils.isLocalHost(url)) {
extension = utils.localAssetRestoreRealPath(url).split('.').pop().toLowerCase();
} else {
const urlExtension = url.split('.').pop().split(/[#?]/)[0].toLowerCase();
if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(urlExtension)) {
extension = urlExtension;
}
}
if (!extension) {
let extension = url.split('.').pop().split(/[#?]/)[0].toLowerCase();
if (!['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(extension)) {
extension = 'png';
}
@ -89,8 +80,6 @@ const electronMenu = {
try {
if (electronMenu.isBlobOrDataUrl(url)) {
await electronMenu.writeNativeImage(filePath, nativeImage.createFromDataURL(url));
} else if (utils.isLocalHost(url)) {
await fs.promises.copyFile(utils.localAssetRestoreRealPath(url), filePath);
} else {
const writeStream = fs.createWriteStream(filePath)
const readStream = request(url)

61
electron/electron.js vendored
View File

@ -11,7 +11,6 @@ const {
shell,
globalShortcut,
nativeTheme,
protocol,
Tray,
Menu,
BrowserView,
@ -89,50 +88,6 @@ if (!fs.existsSync(cacheDir)) {
fs.mkdirSync(cacheDir, { recursive: true });
}
// 在最开始就注册协议为特权协议
protocol.registerSchemesAsPrivileged([
{
scheme: 'local-asset',
privileges: {
standard: true,
secure: true,
supportFetchAPI: true,
corsEnabled: true
}
}
])
/**
* 创建协议
*/
function createProtocol() {
protocol.handle('local-asset', async (request) => {
const url = utils.localAssetRestoreRealPath(request.url)
if (url.includes('..')) {
return new Response('Access Denied', { status: 403 })
}
try {
if (!fs.existsSync(url)) {
return new Response('Not Found', { status: 404 })
}
const data = await fs.promises.readFile(url)
const mimeType = utils.getMimeType(url)
return new Response(data, {
headers: {
'Content-Type': mimeType
}
})
} catch (error) {
console.error('Protocol handler error:', error)
return new Response('Internal Error', { status: 500 })
}
})
}
/**
* 启动web服务
*/
@ -140,11 +95,11 @@ async function startWebServer() {
if (serverUrl) {
return Promise.resolve();
}
return new Promise((resolve, reject) => {
// 创建Express应用
const app = express();
// 使用express.static中间件提供静态文件服务
// Express内置了全面的MIME类型支持无需手动配置
app.use(express.static(serverPublicDir, {
@ -164,18 +119,18 @@ async function startWebServer() {
}
}
}));
// 404处理中间件
app.use((req, res) => {
res.status(404).send('File not found');
});
// 错误处理中间件
app.use((err, req, res, next) => {
console.error('Server error:', err);
res.status(500).send('Internal Server Error');
});
// 启动服务器
const server = app.listen(serverPort, 'localhost', () => {
console.log(`Express static file server running at http://localhost:${serverPort}/`);
@ -183,7 +138,7 @@ async function startWebServer() {
serverUrl = `http://localhost:${serverPort}/`;
resolve(server);
});
// 错误处理
server.on('error', (err) => {
console.error('Server error:', err);
@ -373,7 +328,7 @@ function preCreateChildWindow() {
const originalUA = browser.webContents.session.getUserAgent() || browser.webContents.getUserAgent()
browser.webContents.setUserAgent(originalUA + " SubTaskWindow/" + process.platform + "/" + os.arch() + "/1.0");
utils.loadUrl(browser, serverUrl, 'preload')
utils.loadUrl(browser, serverUrl, '/preload')
preloadWindow = browser;
}
@ -1010,8 +965,6 @@ if (!getTheLock) {
}
// SameSite
utils.useCookie()
// 创建协议
createProtocol()
// 创建主窗口
createMainWindow()
// 预创建子窗口

24
electron/utils.js vendored
View File

@ -639,30 +639,6 @@ const utils = {
}
},
/**
* 本地资源路径还原
* @param {string} url
* @returns {string}
*/
localAssetRestoreRealPath(url) {
if (!utils.isLocalHost(url)) {
return url
}
let p0 = url.replace(/^local-asset:\/\//, '')
const p1 = path.join(__dirname, '.', p0)
if (fs.existsSync(p1)) {
return p1
}
const p2 = path.join(__dirname, '..', p0)
if (fs.existsSync(p2)) {
return p2
}
return url
},
/**
* 加载URL或文件
* @param browser