-
Notifications
You must be signed in to change notification settings - Fork 46
Expand file tree
/
Copy pathindex.php
More file actions
267 lines (257 loc) · 13.1 KB
/
index.php
File metadata and controls
267 lines (257 loc) · 13.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
<?php
session_start();
require_once 'config/database.php';
try {
$db = Database::getInstance();
$pdo = $db->getConnection();
$config = Database::getConfig($pdo);
// 获取上传限制配置
$maxFileSize = 0;
$stmt = $pdo->prepare("SELECT value FROM configs WHERE `key` = 'max_file_size'");
$stmt->execute();
if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$maxFileSize = (int)$row['value'];
}
// 检查是否需要登录限制
if ($config &&
isset($config['login_restriction']) &&
filter_var($config['login_restriction'], FILTER_VALIDATE_BOOLEAN) &&
(!isset($_SESSION['loggedin']) || !$_SESSION['loggedin'])) {
header('Location: /admin');
exit();
}
} catch (Exception $e) {
die($e->getMessage());
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>若梦图床</title>
<meta name="keywords" content="图床程序,高效图片压缩,前端后台设计,图片上传,WEBP转换,阿里云OSS,本地存储,多格式支持,瀑布流管理,图片管理后台,自定义压缩率,尺寸限制">
<meta name="description" content="一款专为个人需求设计的高效图床解决方案,集成了强大的图片压缩功能与优雅的前台后台界面。项目结构精简高效,提供自定义图片压缩率与尺寸设置,有效降低存储与带宽成本。支持JPEG, PNG, GIF转换为WEBP以及SVG、WEBP直接上传,搭载阿里云OSS存储(默认)及灵活的本地存储选项。特性包括点击、拖拽、粘贴及URL本地化上传方式,以及配备瀑布流布局的管理后台,实现图片轻松管理与预览。完全可自定制的体验,满足不同用户对图片管理和优化的高级需求。">
<link rel="shortcut icon" href="static/favicon.svg">
<link rel="stylesheet" type="text/css" href="static/css/styles.css">
</head>
<body>
<header class="blur">
<a href="https://www.bsgun.cn/" target="_blank" title="主页" class="header-link">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-home"></use>
</svg>
</a>
<a href="https://blog.bsgun.cn/" target="_blank" title="博客" class="header-link">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-Blog"></use>
</svg>
</a>
<a href="https://github.com/JLinMr/PixPro/" target="_blank" title="Github" class="header-link">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-Github"></use>
</svg>
</a>
<a href="/admin/" target="_blank" title="后台" class="header-link">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-Setting"></use>
</svg>
</a>
</header>
<main>
<div class="upload-container blur">
<form id="uploadForm" enctype="multipart/form-data">
<!-- 上传框区域 -->
<div class="upload-section">
<button id="deleteImageButton" class="deleteImageButton">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-xmark"></use>
</svg>
</button>
<div id="imageUploadBox" class="imageUploadBox" onclick="document.getElementById('imageInput').click();">
<svg class="icon upload-icon" aria-hidden="true">
<use xlink:href="#icon-up"></use>
</svg>
<input type="file" id="imageInput" name="image[]" accept="image/png, image/jpeg, image/webp, image/svg+xml, image/gif" multiple>
<div id="imagePreviewContainer" class="imagePreviewContainer">
<button id="prevButton" class="nav-button prev-button">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-Left-arrow"></use>
</svg>
</button>
<img id="imagePreview" class="imagePreview" src="" alt="">
<button id="nextButton" class="nav-button next-button">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-Right-arrow"></use>
</svg>
</button>
<div id="imageCounter" class="image-counter"></div>
</div>
</div>
</div>
<!-- 缩略图区域 -->
<div id="thumbnailStrip" class="thumbnail-strip">
<div id="thumbnailScrollContainer" class="thumbnail-scroll-container"></div>
</div>
<!-- 网络图片上传输入框 -->
<div class="url-input-section">
<input type="text" id="pasteOrUrlInput" class="pasteOrUrlInput" placeholder="输入图片网络链接自动上传,或使用Ctrl+V粘贴图片" title="注意:部分网站设置了防盗链,可能无法直接下载">
</div>
<!-- 压缩比率调整 -->
<div class="quality-section">
<label for="qualityInput">图片清晰度 60-100<output id="qualityOutput" class="qualityOutput">60</output></label>
<input type="range" id="qualityInput" name="quality" min="60" max="100" value="60" step="1">
</div>
<!-- 复制按钮区域 -->
<div class="copy-section">
<div class="copy-tab-buttons">
<div class="copy-icons-column">
<button class="copy-tab-btn" data-type="url" title="复制图片链接">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-imageUrl"></use>
</svg>
</button>
<button class="copy-tab-btn" data-type="markdown" title="复制Markdown代码">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-markdownUrl"></use>
</svg>
</button>
<button class="copy-tab-btn" data-type="html" title="复制HTML代码">
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-htmlUrl"></use>
</svg>
</button>
</div>
<div class="copy-links-column">
<div class="copy-link-display disabled" data-type="url">
<span class="copy-link-text" id="urlLinkText"></span>
</div>
<div class="copy-link-display disabled" data-type="markdown">
<span class="copy-link-text" id="markdownLinkText"></span>
</div>
<div class="copy-link-display disabled" data-type="html">
<span class="copy-link-text" id="htmlLinkText"></span>
</div>
</div>
</div>
</div>
<div id="progressContainer" class="progressContainer">
<div id="progressBar" class="progressBar"></div>
</div>
</form>
</div>
<!-- 图片信息展示 -->
<div id="imageInfo" class="imageInfo blur">
<div class="image-info-block">
<div class="info-header">
<svg class="icon info-icon" aria-hidden="true">
<use xlink:href="#icon-imageUrl"></use>
</svg>
<h3>原始图片</h3>
</div>
<div class="info-grid">
<div class="info-item">
<span class="info-label">尺寸</span>
<span class="info-value" id="originalWidth"></span>
</div>
<div class="info-item">
<span class="info-label">大小</span>
<span class="info-value" id="originalSize"></span>
</div>
</div>
</div>
<div class="image-info-block">
<div class="info-header">
<svg class="icon info-icon" aria-hidden="true">
<use xlink:href="#icon-up"></use>
</svg>
<h3>压缩后</h3>
</div>
<div class="info-grid">
<div class="info-item">
<span class="info-label">尺寸</span>
<span class="info-value" id="compressedWidth"></span>
</div>
<div class="info-item">
<span class="info-label">大小</span>
<span class="info-value" id="compressedSize"></span>
</div>
</div>
</div>
<div class="compression-stats">
<div class="stat-badge">
<span class="stat-label">压缩率</span>
<span class="stat-value" id="compressionRatio">-</span>
</div>
<div class="stat-badge">
<span class="stat-label">节省空间</span>
<span class="stat-value" id="savedSpace">-</span>
</div>
</div>
</div>
<!-- 隐藏的元素用于兼容 -->
<span id="originalHeight" style="display:none;"></span>
<span id="compressedHeight" style="display:none;"></span>
<div class="keyboard-hints blur">
<div class="hint-item">
<div class="kbd-group">
<kbd>←</kbd><kbd>→</kbd>
</div>
<span>切换图片</span>
</div>
<div class="hint-item">
<div class="kbd-group">
<kbd>Ctrl</kbd><span class="plus">+</span><kbd>V</kbd>
</div>
<span>粘贴上传</span>
</div>
<div class="hint-item">
<div class="kbd-group">
<kbd>Ctrl</kbd><span class="plus">+</span><kbd>点击</kbd>
</div>
<span>批量复制</span>
</div>
<div class="hint-item">
<div class="kbd-group">
<kbd>滚轮</kbd>
</div>
<span>切换图片</span>
</div>
<div class="hint-item">
<div class="kbd-group">
<kbd>Esc</kbd>
</div>
<span>清除图片</span>
</div>
</div>
</main>
<footer>
<?php if (($_ENV['DEMO_MODE'] ?? 'false') === 'true'): ?>
<div style="padding: 10px;margin-bottom: 10px;border-radius: 10px;font-size: 15px;font-weight: bold;backdrop-filter: blur(10px);-webkit-backdrop-filter: blur(10px);border: 1px solid rgb(255 255 255 / 20%);background: rgb(255 60 60 / 30%);animation: fadeIn 0.5s ease-in-out forwards;">⚠️ 演示站点 - 所有图片公开可见且可能被删除</div>
<?php endif; ?>
<span>富强</span>
<span>民主</span>
<span>文明</span>
<span>和谐</span>
<span>自由</span>
<span>平等</span>
<span>公正</span>
<span>法治</span>
<span>爱国</span>
<span>敬业</span>
<span>诚信</span>
<span>友善</span>
<div class="icp">
<span>© 2024</span><a href="https://bsgun.cn" target="_blank">梦爱吃鱼</a>
<span>本站程序发布在</span><a href="https://github.com/JLinMr/PixPro/" target="_blank">Github</a>
<button class="logo-btn">站点声明</button>
<em class="logotitle blur">本站不保证内容,时效和稳定性,请勿上传包含危害国家安全和民族团结、侵犯他人权益、欺骗性质、色情或暴力的图片。严格遵守国家相关法律法规,尊重版权、著作权等权利;图片内容均由「网友」自行上传,所有图片作用、性质都与本站无关,本站对所有图片合法性概不负责,亦不承担任何法律责任;</em>
</div>
</footer>
<script type="module" src="static/js/main.js" data-max-file-size="<?php echo $maxFileSize; ?>">
</script>
<!-- 引入鼠标指针跟随特效 -->
<script type="text/javascript" src="static/js/cursor.js" defer data-lazy="true"></script>
<script src="//at.alicdn.com/t/c/font_4623353_hb4c04qfi4u.js"></script>
</body>
</html>