fix: 修复HTTPS页面下载HTTP直链的Mixed Content问题

- downloadFile: 检测Mixed Content自动降级到后端代理下载
- getMediaUrl: 媒体预览同样处理Mixed Content
- 当HTTPS页面遇到HTTP直链时,自动使用服务器代理
- 添加Toast提示用户正在使用代理下载

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-27 14:59:09 +08:00
parent 1b7585d54a
commit a4c94b1f68
2 changed files with 37 additions and 6 deletions

View File

@@ -2541,6 +2541,6 @@
} }
</style> </style>
<script src="app.js?v=20251127001"></script> <script src="app.js?v=20251127002"></script>
</body> </body>
</html> </html>

View File

@@ -983,9 +983,28 @@ handleDragLeave(e) {
downloadFile(file) { downloadFile(file) {
console.log("[DEBUG] 下载文件:", file); console.log("[DEBUG] 下载文件:", file);
const url = file.httpDownloadUrl
? file.httpDownloadUrl // 构建后端代理下载URL
: `${this.apiBase}/api/files/download?path=${encodeURIComponent(this.currentPath === '/' ? `/${file.name}` : `${this.currentPath}/${file.name}`)}`; const proxyUrl = `${this.apiBase}/api/files/download?path=${encodeURIComponent(this.currentPath === '/' ? `/${file.name}` : `${this.currentPath}/${file.name}`)}`;
let url = proxyUrl;
// 检查是否有HTTP直链可用
if (file.httpDownloadUrl) {
// 检测Mixed ContentHTTPS页面不能加载HTTP资源
const isHttpsPage = window.location.protocol === 'https:';
const isHttpLink = file.httpDownloadUrl.startsWith('http://');
if (isHttpsPage && isHttpLink) {
// HTTPS页面 + HTTP直链 = Mixed Content使用后端代理
console.log("[DEBUG] 检测到Mixed Content使用后端代理下载");
this.showToast('info', '提示', '由于安全限制,正在通过服务器代理下载');
url = proxyUrl;
} else {
// 可以使用直链
url = file.httpDownloadUrl;
}
}
// 统一通过隐藏链接触发下载,避免弹出新窗口 // 统一通过隐藏链接触发下载,避免弹出新窗口
const link = document.createElement('a'); const link = document.createElement('a');
@@ -1203,13 +1222,25 @@ handleDragLeave(e) {
? `/${file.name}` ? `/${file.name}`
: `${this.currentPath}/${file.name}`; : `${this.currentPath}/${file.name}`;
// SFTP存储且配置了HTTP下载URL使用HTTP直接访问否则使用API下载 // 构建后端代理URL
const proxyUrl = `${this.apiBase}/api/files/download?path=${encodeURIComponent(filePath)}`;
// SFTP存储且配置了HTTP下载URL
if (file.httpDownloadUrl) { if (file.httpDownloadUrl) {
// 检测Mixed ContentHTTPS页面不能加载HTTP资源
const isHttpsPage = window.location.protocol === 'https:';
const isHttpLink = file.httpDownloadUrl.startsWith('http://');
if (isHttpsPage && isHttpLink) {
// HTTPS页面 + HTTP直链 = Mixed Content使用后端代理
console.log("[DEBUG] 媒体预览检测到Mixed Content使用后端代理");
return proxyUrl;
}
return file.httpDownloadUrl; return file.httpDownloadUrl;
} }
// 本地存储或未配置HTTP URL使用API下载同域 Cookie 验证) // 本地存储或未配置HTTP URL使用API下载同域 Cookie 验证)
return `${this.apiBase}/api/files/download?path=${encodeURIComponent(filePath)}`; return proxyUrl;
}, },
// 获取文件缩略图URL // 获取文件缩略图URL