summaryrefslogtreecommitdiff
path: root/client/assets/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/assets/index.js')
-rw-r--r--client/assets/index.js318
1 files changed, 162 insertions, 156 deletions
diff --git a/client/assets/index.js b/client/assets/index.js
index 0e9d61a..dcf7f25 100644
--- a/client/assets/index.js
+++ b/client/assets/index.js
@@ -1,177 +1,183 @@
document.addEventListener('DOMContentLoaded', async () => {
- const urlParams = new URLSearchParams(window.location.search);
- const fileId = urlParams.get('id');
- const key = urlParams.get('key');
+ const urlParams = new URLSearchParams(window.location.search)
+ const fileId = urlParams.get('id')
+ const key = urlParams.get('key')
- if (fileId && key) {
- displayFileDetails(fileId, key);
- } else {
- document.getElementById('upload__form').style.display = 'block';
- setupUploadForm();
- }
-});
+ if (fileId && key) {
+ displayFileDetails(fileId, key)
+ } else {
+ document.getElementById('upload__form').style.display = 'block'
+ setupUploadForm()
+ }
+})
-const baseUrl = window.location.origin;
-const CHUNK_SIZE = 100 * 1024 * 1024; // 100 MB
+const baseUrl = window.location.origin
+const CHUNK_SIZE = 100 * 1024 * 1024 // 100 MB
async function displayFileDetails(fileId, key) {
- try {
- const response = await fetch(`${baseUrl}/get/${fileId}?key=${key}`, {
- method: 'GET',
- });
-
- const fileDetails = document.getElementById('file__details');
- const fileNameElement = document.getElementById('file__name');
- const fileSizeElement = document.getElementById('file__size');
- const downloadButton = document.getElementById('download__btn');
- const copyButton = document.getElementById('copy__btn');
-
- if (!response.ok) {
- fileDetails.textContent = `Error: ${response.statusText}`;
- fileDetails.style.display = 'flex';
- return;
- }
-
- const contentType = response.headers.get('Content-Type');
-
- if (contentType && contentType.includes('application/json')) {
- const result = await response.json();
- const downloadUrl = `${baseUrl}/download/${fileId}?key=${key}`;
- const pageUrl = `${baseUrl}/?id=${fileId}&key=${key}`;
- fileNameElement.textContent = `${result.fileName}`;
- fileSizeElement.textContent = `${result.fileSize}`;
- downloadButton.innerHTML = `<a href="${downloadUrl}">Download</a>`;
- copyButton.onclick = () => {
- navigator.clipboard.writeText(pageUrl);
- copyButton.textContent = 'Copied!';
- };
- } else {
- const result = await response.text();
- fileDetails.textContent = result;
- }
-
- fileDetails.style.display = 'flex';
- } catch (error) {
- console.error('Error:', error);
- document.getElementById('file__details').textContent = 'An error occurred. Please try again.';
- document.getElementById('file__details').style.display = 'flex';
+ try {
+ const response = await fetch(`${baseUrl}/get/${fileId}?key=${key}`, {
+ method: 'GET'
+ })
+
+ const fileDetails = document.getElementById('file__details')
+ const fileNameElement = document.getElementById('file__name')
+ const fileSizeElement = document.getElementById('file__size')
+ const downloadButton = document.getElementById('download__btn')
+ const copyButton = document.getElementById('copy__btn')
+
+ if (!response.ok) {
+ fileDetails.textContent = `Error: ${response.statusText}`
+ fileDetails.style.display = 'flex'
+ return
+ }
+
+ const contentType = response.headers.get('Content-Type')
+
+ if (contentType && contentType.includes('application/json')) {
+ const result = await response.json()
+ const downloadUrl = `${baseUrl}/download/${fileId}?key=${key}`
+ const pageUrl = `${baseUrl}/?id=${fileId}&key=${key}`
+ fileNameElement.textContent = `${result.fileName}`
+ fileSizeElement.textContent = `${result.fileSize}`
+ downloadButton.innerHTML = `<a href="${downloadUrl}">Download</a>`
+ copyButton.onclick = () => {
+ navigator.clipboard.writeText(pageUrl)
+ copyButton.textContent = 'Copied!'
+ }
+ } else {
+ const result = await response.text()
+ fileDetails.textContent = result
}
+
+ fileDetails.style.display = 'flex'
+ } catch (error) {
+ console.error('Error:', error)
+ document.getElementById('file__details').textContent =
+ 'An error occurred. Please try again.'
+ document.getElementById('file__details').style.display = 'flex'
+ }
}
function setupUploadForm() {
- const fileInput = document.querySelector('.upload__input');
- const overlayText = document.querySelector('.upload__input__overlay__text');
-
- fileInput.addEventListener('change', () => {
- if (fileInput.files.length > 0) {
- overlayText.textContent = fileInput.files[0].name;
- } else {
- overlayText.textContent = 'Choose a file or drag it here';
- }
- });
-
- document.getElementById('upload__form').addEventListener('submit', async (event) => {
- event.preventDefault();
-
- const file = fileInput.files[0];
-
- if (!file) {
- console.log('No file selected.');
- return;
- }
-
- const progressBar = document.getElementById('upload__progress');
- const progressFill = document.getElementById('progress__fill');
- const uploadButton = document.getElementById('upload__btn');
-
- uploadButton.style.display = 'none';
- progressBar.style.display = 'block';
- fileInput.disabled = true;
-
- try {
- await uploadFileInChunks(file, progressFill);
- } catch (error) {
- console.error('Error:', error);
- document.getElementById('upload__result').textContent = 'An error occurred. Please try again.';
- document.getElementById('upload__result').classList.add('upload__result__visible');
- } finally {
- progressBar.style.display = 'none';
- uploadButton.style.display = 'inline-block';
- fileInput.disabled = false;
- }
- });
-}
+ const fileInput = document.querySelector('.upload__input')
+ const overlayText = document.querySelector('.upload__input__overlay__text')
-async function uploadFileInChunks(file, progressFill) {
- const fileSize = file.size;
- const chunkCount = Math.ceil(fileSize / CHUNK_SIZE);
- const uploadId = generateUploadId();
- let uploadedSize = 0;
-
- for (let chunkIndex = 0; chunkIndex < chunkCount; chunkIndex++) {
- const start = chunkIndex * CHUNK_SIZE;
- const end = Math.min(start + CHUNK_SIZE, fileSize);
- const chunk = file.slice(start, end);
-
- const formData = new FormData();
- formData.append('chunk', chunk);
- formData.append('uploadId', uploadId);
- formData.append('chunkIndex', chunkIndex);
- formData.append('chunkCount', chunkCount);
- formData.append('fileName', file.name);
-
- await uploadChunk(formData, progressFill, uploadedSize, fileSize);
-
- uploadedSize += chunk.size;
+ fileInput.addEventListener('change', () => {
+ if (fileInput.files.length > 0) {
+ overlayText.textContent = fileInput.files[0].name
+ } else {
+ overlayText.textContent = 'Choose a file or drag it here'
}
+ })
+
+ document
+ .getElementById('upload__form')
+ .addEventListener('submit', async (event) => {
+ event.preventDefault()
+
+ const file = fileInput.files[0]
+
+ if (!file) {
+ console.log('No file selected.')
+ return
+ }
+
+ const progressBar = document.getElementById('upload__progress')
+ const progressFill = document.getElementById('progress__fill')
+ const uploadButton = document.getElementById('upload__btn')
+
+ uploadButton.style.display = 'none'
+ progressBar.style.display = 'block'
+ fileInput.disabled = true
+
+ try {
+ await uploadFileInChunks(file, progressFill)
+ } catch (error) {
+ console.error('Error:', error)
+ document.getElementById('upload__result').textContent =
+ 'An error occurred. Please try again.'
+ document
+ .getElementById('upload__result')
+ .classList.add('upload__result__visible')
+ } finally {
+ progressBar.style.display = 'none'
+ uploadButton.style.display = 'inline-block'
+ fileInput.disabled = false
+ }
+ })
+}
- // Call upload_complete endpoint
- const completeFormData = new FormData();
- completeFormData.append('uploadId', uploadId);
- completeFormData.append('chunkCount', chunkCount);
- completeFormData.append('fileName', file.name);
+async function uploadFileInChunks(file, progressFill) {
+ const fileSize = file.size
+ const chunkCount = Math.ceil(fileSize / CHUNK_SIZE)
+ const uploadId = generateUploadId()
+ let uploadedSize = 0
+
+ for (let chunkIndex = 0; chunkIndex < chunkCount; chunkIndex++) {
+ const start = chunkIndex * CHUNK_SIZE
+ const end = Math.min(start + CHUNK_SIZE, fileSize)
+ const chunk = file.slice(start, end)
+
+ const formData = new FormData()
+ formData.append('chunk', chunk)
+ formData.append('uploadId', uploadId)
+ formData.append('chunkIndex', chunkIndex)
+ formData.append('chunkCount', chunkCount)
+ formData.append('fileName', file.name)
+
+ await uploadChunk(formData, progressFill, uploadedSize, fileSize)
+
+ uploadedSize += chunk.size
+ }
+
+ // Call upload_complete endpoint
+ const completeFormData = new FormData()
+ completeFormData.append('uploadId', uploadId)
+ completeFormData.append('chunkCount', chunkCount)
+ completeFormData.append('fileName', file.name)
+
+ const completeResponse = await fetch(`${baseUrl}/upload_complete`, {
+ method: 'POST',
+ body: completeFormData
+ })
+
+ if (!completeResponse.ok) {
+ throw new Error(`Error completing upload: ${completeResponse.statusText}`)
+ }
+
+ const result = await completeResponse.json()
+ const pageUrl = `${baseUrl}/?id=${result.id}&key=${result.key}`
+ window.location.href = pageUrl
+}
- const completeResponse = await fetch(`${baseUrl}/upload_complete`, {
- method: 'POST',
- body: completeFormData,
- });
+async function uploadChunk(formData, progressFill, uploadedSize, fileSize) {
+ return new Promise((resolve, reject) => {
+ const xhr = new XMLHttpRequest()
+ xhr.open('POST', `${baseUrl}/upload_chunk`, true)
+
+ xhr.upload.onprogress = (event) => {
+ if (event.lengthComputable) {
+ const totalUploaded = uploadedSize + event.loaded
+ const progress = Math.round((totalUploaded / fileSize) * 100)
+ progressFill.style.width = `${progress}%`
+ }
+ }
- if (!completeResponse.ok) {
- throw new Error(`Error completing upload: ${completeResponse.statusText}`);
+ xhr.onload = () => {
+ if (xhr.status === 200) {
+ resolve()
+ } else {
+ reject(new Error(`Error uploading chunk: ${xhr.statusText}`))
+ }
}
- const result = await completeResponse.json();
- const pageUrl = `${baseUrl}/?id=${result.id}&key=${result.key}`;
- window.location.href = pageUrl;
-}
+ xhr.onerror = () => reject(new Error('Network error occurred'))
-async function uploadChunk(formData, progressFill, uploadedSize, fileSize) {
- return new Promise((resolve, reject) => {
- const xhr = new XMLHttpRequest();
- xhr.open('POST', `${baseUrl}/upload_chunk`, true);
-
- xhr.upload.onprogress = (event) => {
- if (event.lengthComputable) {
- const totalUploaded = uploadedSize + event.loaded;
- const progress = Math.round((totalUploaded / fileSize) * 100);
- progressFill.style.width = `${progress}%`;
- }
- };
-
- xhr.onload = () => {
- if (xhr.status === 200) {
- resolve();
- } else {
- reject(new Error(`Error uploading chunk: ${xhr.statusText}`));
- }
- };
-
- xhr.onerror = () => reject(new Error('Network error occurred'));
-
- xhr.send(formData);
- });
+ xhr.send(formData)
+ })
}
function generateUploadId() {
- return Math.random().toString(36).substr(2, 9);
+ return Math.random().toString(36).substr(2, 9)
}