| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Video Uploader for Hugging Face Spaces</title> |
| <style> |
| body { |
| font-family: Arial, sans-serif; |
| max-width: 800px; |
| margin: 0 auto; |
| padding: 20px; |
| background-color: #f0f0f0; |
| } |
| h1 { |
| color: #333; |
| text-align: center; |
| } |
| #upload-form { |
| background-color: white; |
| padding: 20px; |
| border-radius: 8px; |
| box-shadow: 0 2px 4px rgba(0,0,0,0.1); |
| } |
| #file-input { |
| display: none; |
| } |
| #file-label { |
| display: inline-block; |
| padding: 10px 20px; |
| background-color: #007bff; |
| color: white; |
| cursor: pointer; |
| border-radius: 4px; |
| } |
| #file-name { |
| margin-top: 10px; |
| } |
| #upload-button { |
| display: block; |
| width: 100%; |
| padding: 10px; |
| background-color: #28a745; |
| color: white; |
| border: none; |
| border-radius: 4px; |
| cursor: pointer; |
| margin-top: 10px; |
| } |
| #progress-bar { |
| width: 100%; |
| height: 20px; |
| background-color: #e0e0e0; |
| border-radius: 4px; |
| margin-top: 10px; |
| overflow: hidden; |
| } |
| #progress { |
| width: 0%; |
| height: 100%; |
| background-color: #28a745; |
| transition: width 0.3s ease; |
| } |
| #status { |
| margin-top: 10px; |
| text-align: center; |
| font-weight: bold; |
| } |
| </style> |
| </head> |
| <body> |
| <h1>Video Uploader for Hugging Face Spaces</h1> |
| <div id="upload-form"> |
| <input type="file" id="file-input" accept=".mp4,.mkv,.avi,.mov"> |
| <label for="file-input" id="file-label">Choose File</label> |
| <div id="file-name"></div> |
| <button id="upload-button" disabled>Upload</button> |
| <div id="progress-bar"> |
| <div id="progress"></div> |
| </div> |
| <div id="status"></div> |
| </div> |
|
|
| <script> |
| const fileInput = document.getElementById('file-input'); |
| const fileLabel = document.getElementById('file-label'); |
| const fileName = document.getElementById('file-name'); |
| const uploadButton = document.getElementById('upload-button'); |
| const progressBar = document.getElementById('progress'); |
| const status = document.getElementById('status'); |
| |
| fileInput.addEventListener('change', (e) => { |
| if (e.target.files.length > 0) { |
| fileName.textContent = `Selected file: ${e.target.files[0].name}`; |
| uploadButton.disabled = false; |
| } else { |
| fileName.textContent = ''; |
| uploadButton.disabled = true; |
| } |
| }); |
| |
| uploadButton.addEventListener('click', async () => { |
| const file = fileInput.files[0]; |
| if (!file) return; |
| |
| const formData = new FormData(); |
| formData.append('file', file); |
| |
| try { |
| status.textContent = 'Uploading...'; |
| const response = await fetch('/upload', { |
| method: 'POST', |
| body: formData |
| }); |
| |
| if (response.ok) { |
| status.textContent = 'Upload successful!'; |
| progressBar.style.width = '100%'; |
| } else { |
| throw new Error('Upload failed'); |
| } |
| } catch (error) { |
| status.textContent = `Error: ${error.message}`; |
| } |
| }); |
| </script> |
| </body> |
| </html> |