chb2026 commited on
Commit
22a0edd
·
verified ·
1 Parent(s): 70dd7dc

Update templates/index.html

Browse files
Files changed (1) hide show
  1. templates/index.html +26 -78
templates/index.html CHANGED
@@ -1,12 +1,12 @@
1
  <!DOCTYPE html>
2
- <html lang="zh-CN">
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>HF-PicBed - 图片上传服务</title>
7
  <style>
8
  body {
9
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
10
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
11
  min-height: 100vh;
12
  margin: 0;
@@ -16,31 +16,28 @@
16
  padding: 20px;
17
  }
18
  .container {
19
- background-color: rgba(255, 255, 255, 0.95);
20
- border-radius: 12px;
21
  padding: 2rem;
22
- box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12);
23
  text-align: center;
24
  max-width: 500px;
25
  width: 100%;
26
  }
27
  h1 {
28
- color: #1a202c;
29
- margin-bottom: 1.5rem;
30
- font-size: 1.875rem;
31
  }
32
  #drop-area {
33
  border: 2px dashed #4a5568;
34
- border-radius: 12px;
35
  padding: 2rem;
36
- margin-bottom: 1.5rem;
37
  cursor: pointer;
38
- transition: all 0.3s ease;
39
- background-color: rgba(74, 85, 104, 0.05);
40
  }
41
- #drop-area:hover, #drop-area.drag-active {
42
  background-color: rgba(74, 85, 104, 0.1);
43
- border-color: #2d3748;
44
  }
45
  #file-input {
46
  display: none;
@@ -49,49 +46,23 @@
49
  background-color: #4a5568;
50
  color: white;
51
  border: none;
52
- padding: 0.75rem 1.5rem;
53
- border-radius: 8px;
54
  cursor: pointer;
55
- transition: all 0.3s ease;
56
- font-size: 1rem;
57
- font-weight: 500;
58
  }
59
  #upload-btn:hover {
60
  background-color: #2d3748;
61
- transform: translateY(-1px);
62
- }
63
- #upload-btn:disabled {
64
- background-color: #a0aec0;
65
- cursor: not-allowed;
66
- transform: none;
67
  }
68
  #result {
69
- margin-top: 1.5rem;
70
  word-break: break-all;
71
- color: #2d3748;
72
  }
73
  #preview {
74
  max-width: 100%;
75
  max-height: 300px;
76
- margin: 1rem 0;
77
- border-radius: 8px;
78
  display: none;
79
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
80
- }
81
- .success {
82
- color: #2f855a;
83
- }
84
- .error {
85
- color: #c53030;
86
- }
87
- a {
88
- color: #4c51bf;
89
- text-decoration: none;
90
- transition: color 0.3s ease;
91
- }
92
- a:hover {
93
- color: #434190;
94
- text-decoration: underline;
95
  }
96
  </style>
97
  </head>
@@ -102,7 +73,7 @@
102
  <p>拖放图片到这里或点击选择文件</p>
103
  <input type="file" id="file-input" accept="image/*">
104
  </div>
105
- <img id="preview" alt="图片预览" />
106
  <button id="upload-btn" disabled>上传图片</button>
107
  <div id="result"></div>
108
  </div>
@@ -114,13 +85,10 @@
114
  const result = document.getElementById('result');
115
  const preview = document.getElementById('preview');
116
 
117
- // 点击上传区域触发文件选择
118
  dropArea.addEventListener('click', () => fileInput.click());
119
 
120
- // 阻止默认拖放行为
121
  ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
122
  dropArea.addEventListener(eventName, preventDefaults, false);
123
- document.body.addEventListener(eventName, preventDefaults, false);
124
  });
125
 
126
  function preventDefaults(e) {
@@ -128,7 +96,6 @@
128
  e.stopPropagation();
129
  }
130
 
131
- // 拖放视觉反馈
132
  ['dragenter', 'dragover'].forEach(eventName => {
133
  dropArea.addEventListener(eventName, highlight, false);
134
  });
@@ -138,14 +105,13 @@
138
  });
139
 
140
  function highlight() {
141
- dropArea.classList.add('drag-active');
142
  }
143
 
144
  function unhighlight() {
145
- dropArea.classList.remove('drag-active');
146
  }
147
 
148
- // 处理文件拖放
149
  dropArea.addEventListener('drop', handleDrop, false);
150
 
151
  function handleDrop(e) {
@@ -154,7 +120,6 @@
154
  handleFiles(files);
155
  }
156
 
157
- // 处理文件选择
158
  fileInput.addEventListener('change', function() {
159
  handleFiles(this.files);
160
  });
@@ -162,17 +127,11 @@
162
  function handleFiles(files) {
163
  if (files.length > 0) {
164
  const file = files[0];
165
- if (file.type.startsWith('image/')) {
166
- previewFile(file);
167
- uploadBtn.disabled = false;
168
- } else {
169
- alert('请选择图片文件');
170
- uploadBtn.disabled = true;
171
- }
172
  }
173
  }
174
 
175
- // 预览选择的图片
176
  function previewFile(file) {
177
  const reader = new FileReader();
178
  reader.readAsDataURL(file);
@@ -182,7 +141,6 @@
182
  }
183
  }
184
 
185
- // 上传文件
186
  uploadBtn.addEventListener('click', uploadFile);
187
 
188
  function uploadFile() {
@@ -197,31 +155,21 @@
197
 
198
  uploadBtn.disabled = true;
199
  uploadBtn.textContent = '上传中...';
200
- result.innerHTML = '';
201
 
202
  fetch('/api/1/upload', {
203
  method: 'POST',
204
  body: formData
205
  })
206
- .then(response => {
207
- if (!response.ok) {
208
- throw new Error(`HTTP error! status: ${response.status}`);
209
- }
210
- return response.json();
211
- })
212
  .then(data => {
213
  if (data.status_code === 200) {
214
- result.innerHTML = `
215
- <p class="success">上传成功!</p>
216
- <p><a href="${data.image.url}" target="_blank">查看图片</a></p>
217
- <p>图片URL: <br>${data.image.url}</p>
218
- `;
219
  } else {
220
- throw new Error(data.error?.message || '上传失败');
221
  }
222
  })
223
  .catch(error => {
224
- result.innerHTML = `<p class="error">上传失败: ${error.message}</p>`;
225
  })
226
  .finally(() => {
227
  uploadBtn.disabled = false;
 
1
  <!DOCTYPE html>
2
+ <html lang="en">
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>HF-PicBed - Beautiful Image Upload</title>
7
  <style>
8
  body {
9
+ font-family: Arial, sans-serif;
10
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
11
  min-height: 100vh;
12
  margin: 0;
 
16
  padding: 20px;
17
  }
18
  .container {
19
+ background-color: rgba(255, 255, 255, 0.9);
20
+ border-radius: 10px;
21
  padding: 2rem;
22
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
23
  text-align: center;
24
  max-width: 500px;
25
  width: 100%;
26
  }
27
  h1 {
28
+ color: #4a5568;
29
+ margin-bottom: 1rem;
 
30
  }
31
  #drop-area {
32
  border: 2px dashed #4a5568;
33
+ border-radius: 10px;
34
  padding: 2rem;
35
+ margin-bottom: 1rem;
36
  cursor: pointer;
37
+ transition: background-color 0.3s ease;
 
38
  }
39
+ #drop-area:hover {
40
  background-color: rgba(74, 85, 104, 0.1);
 
41
  }
42
  #file-input {
43
  display: none;
 
46
  background-color: #4a5568;
47
  color: white;
48
  border: none;
49
+ padding: 0.5rem 1rem;
50
+ border-radius: 5px;
51
  cursor: pointer;
52
+ transition: background-color 0.3s ease;
 
 
53
  }
54
  #upload-btn:hover {
55
  background-color: #2d3748;
 
 
 
 
 
 
56
  }
57
  #result {
58
+ margin-top: 1rem;
59
  word-break: break-all;
 
60
  }
61
  #preview {
62
  max-width: 100%;
63
  max-height: 300px;
64
+ margin-top: 1rem;
 
65
  display: none;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  }
67
  </style>
68
  </head>
 
73
  <p>拖放图片到这里或点击选择文件</p>
74
  <input type="file" id="file-input" accept="image/*">
75
  </div>
76
+ <img id="preview" alt="Image preview" />
77
  <button id="upload-btn" disabled>上传图片</button>
78
  <div id="result"></div>
79
  </div>
 
85
  const result = document.getElementById('result');
86
  const preview = document.getElementById('preview');
87
 
 
88
  dropArea.addEventListener('click', () => fileInput.click());
89
 
 
90
  ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
91
  dropArea.addEventListener(eventName, preventDefaults, false);
 
92
  });
93
 
94
  function preventDefaults(e) {
 
96
  e.stopPropagation();
97
  }
98
 
 
99
  ['dragenter', 'dragover'].forEach(eventName => {
100
  dropArea.addEventListener(eventName, highlight, false);
101
  });
 
105
  });
106
 
107
  function highlight() {
108
+ dropArea.style.backgroundColor = 'rgba(74, 85, 104, 0.1)';
109
  }
110
 
111
  function unhighlight() {
112
+ dropArea.style.backgroundColor = 'transparent';
113
  }
114
 
 
115
  dropArea.addEventListener('drop', handleDrop, false);
116
 
117
  function handleDrop(e) {
 
120
  handleFiles(files);
121
  }
122
 
 
123
  fileInput.addEventListener('change', function() {
124
  handleFiles(this.files);
125
  });
 
127
  function handleFiles(files) {
128
  if (files.length > 0) {
129
  const file = files[0];
130
+ previewFile(file);
131
+ uploadBtn.disabled = false;
 
 
 
 
 
132
  }
133
  }
134
 
 
135
  function previewFile(file) {
136
  const reader = new FileReader();
137
  reader.readAsDataURL(file);
 
141
  }
142
  }
143
 
 
144
  uploadBtn.addEventListener('click', uploadFile);
145
 
146
  function uploadFile() {
 
155
 
156
  uploadBtn.disabled = true;
157
  uploadBtn.textContent = '上传中...';
 
158
 
159
  fetch('/api/1/upload', {
160
  method: 'POST',
161
  body: formData
162
  })
163
+ .then(response => response.json())
 
 
 
 
 
164
  .then(data => {
165
  if (data.status_code === 200) {
166
+ result.innerHTML = `<p>上传成功!</p><a href="${data.image.url}" target="_blank">查看图片</a>`;
 
 
 
 
167
  } else {
168
+ result.textContent = `上传失败: ${data.error.message}`;
169
  }
170
  })
171
  .catch(error => {
172
+ result.textContent = `上传出错: ${error.message}`;
173
  })
174
  .finally(() => {
175
  uploadBtn.disabled = false;