Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -6,6 +6,7 @@ import asyncio
|
|
6 |
from typing import Dict
|
7 |
import os
|
8 |
import mimetypes
|
|
|
9 |
|
10 |
app = FastAPI()
|
11 |
|
@@ -634,7 +635,7 @@ HTML_CONTENT = """
|
|
634 |
for (let i = 0; i < items.length; i++) {
|
635 |
if (items[i].kind === 'file') {
|
636 |
const file = items[i].getAsFile();
|
637 |
-
const newFileName =
|
638 |
const renamedFile = new File([file], newFileName, { type: file.type });
|
639 |
pastedFiles.push(renamedFile);
|
640 |
}
|
@@ -645,20 +646,6 @@ HTML_CONTENT = """
|
|
645 |
}
|
646 |
});
|
647 |
|
648 |
-
function generateUniqueFileName(originalName, fileList) {
|
649 |
-
const extension = originalName.split('.').pop();
|
650 |
-
const baseName = originalName.split('.').slice(0, -1).join('.');
|
651 |
-
let counter = 1;
|
652 |
-
let newName = originalName;
|
653 |
-
|
654 |
-
while (fileList.some(file => file.name === newName)) {
|
655 |
-
newName = `${baseName}${counter}.${extension}`;
|
656 |
-
counter++;
|
657 |
-
}
|
658 |
-
|
659 |
-
return newName;
|
660 |
-
}
|
661 |
-
|
662 |
function updateFileNameDisplay() {
|
663 |
const fileNames = pastedFiles.map(file => file.name).join(', ');
|
664 |
fileName.textContent = fileNames;
|
@@ -723,42 +710,26 @@ HTML_CONTENT = """
|
|
723 |
const formData = new FormData();
|
724 |
formData.append('file', file);
|
725 |
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
throw new Error(`HTTP error! status: ${xhr.status}`);
|
743 |
-
}
|
744 |
-
};
|
745 |
-
|
746 |
-
xhr.onerror = function() {
|
747 |
-
throw new Error('Network error occurred');
|
748 |
-
};
|
749 |
-
|
750 |
-
xhr.send(formData);
|
751 |
-
|
752 |
-
await new Promise((resolve, reject) => {
|
753 |
-
xhr.onloadend = resolve;
|
754 |
-
xhr.onerror = reject;
|
755 |
-
});
|
756 |
-
|
757 |
-
break;
|
758 |
-
} catch (error) {
|
759 |
-
console.error('Upload error:', error);
|
760 |
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
761 |
}
|
|
|
|
|
|
|
762 |
}
|
763 |
}
|
764 |
|
@@ -781,13 +752,6 @@ HTML_CONTENT = """
|
|
781 |
return container;
|
782 |
}
|
783 |
|
784 |
-
function updateProgress(event, progressBar) {
|
785 |
-
if (event.lengthComputable) {
|
786 |
-
const percentComplete = (event.loaded / event.total) * 100;
|
787 |
-
progressBar.style.width = percentComplete + '%';
|
788 |
-
}
|
789 |
-
}
|
790 |
-
|
791 |
function resetUploadState() {
|
792 |
fileInput.value = '';
|
793 |
fileName.textContent = '';
|
@@ -873,7 +837,7 @@ HTML_CONTENT = """
|
|
873 |
const historyItem = document.createElement('div');
|
874 |
historyItem.className = 'history-item';
|
875 |
|
876 |
-
|
877 |
itemName.className = 'history-item-name';
|
878 |
itemName.textContent = item.fileName;
|
879 |
historyItem.appendChild(itemName);
|
@@ -899,7 +863,7 @@ HTML_CONTENT = """
|
|
899 |
};
|
900 |
actionsContainer.appendChild(openBtn);
|
901 |
|
902 |
-
|
903 |
const embedBtn = document.createElement('button');
|
904 |
embedBtn.textContent = 'Embed';
|
905 |
embedBtn.className = 'small-btn';
|
@@ -956,7 +920,7 @@ HTML_CONTENT = """
|
|
956 |
quickOpenContent.appendChild(link);
|
957 |
}
|
958 |
|
959 |
-
|
960 |
}
|
961 |
</script>
|
962 |
</body>
|
|
|
6 |
from typing import Dict
|
7 |
import os
|
8 |
import mimetypes
|
9 |
+
import uuid
|
10 |
|
11 |
app = FastAPI()
|
12 |
|
|
|
635 |
for (let i = 0; i < items.length; i++) {
|
636 |
if (items[i].kind === 'file') {
|
637 |
const file = items[i].getAsFile();
|
638 |
+
const newFileName = `pasted_image_${Date.now()}.png`;
|
639 |
const renamedFile = new File([file], newFileName, { type: file.type });
|
640 |
pastedFiles.push(renamedFile);
|
641 |
}
|
|
|
646 |
}
|
647 |
});
|
648 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
649 |
function updateFileNameDisplay() {
|
650 |
const fileNames = pastedFiles.map(file => file.name).join(', ');
|
651 |
fileName.textContent = fileNames;
|
|
|
710 |
const formData = new FormData();
|
711 |
formData.append('file', file);
|
712 |
|
713 |
+
try {
|
714 |
+
const response = await fetch('/upload', {
|
715 |
+
method: 'POST',
|
716 |
+
body: formData
|
717 |
+
});
|
718 |
+
|
719 |
+
if (response.ok) {
|
720 |
+
const result = await response.json();
|
721 |
+
if (result.url) {
|
722 |
+
addResultLink(result.url, file.name, result.originalExtension);
|
723 |
+
saveToHistory(file.name, result.url, result.originalExtension);
|
724 |
+
} else {
|
725 |
+
throw new Error('Upload failed: ' + result.error);
|
726 |
+
}
|
727 |
+
} else {
|
728 |
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
729 |
}
|
730 |
+
} catch (error) {
|
731 |
+
console.error('Upload error:', error);
|
732 |
+
alert(`Failed to upload ${file.name}: ${error.message}`);
|
733 |
}
|
734 |
}
|
735 |
|
|
|
752 |
return container;
|
753 |
}
|
754 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
755 |
function resetUploadState() {
|
756 |
fileInput.value = '';
|
757 |
fileName.textContent = '';
|
|
|
837 |
const historyItem = document.createElement('div');
|
838 |
historyItem.className = 'history-item';
|
839 |
|
840 |
+
const itemName = document.createElement('span');
|
841 |
itemName.className = 'history-item-name';
|
842 |
itemName.textContent = item.fileName;
|
843 |
historyItem.appendChild(itemName);
|
|
|
863 |
};
|
864 |
actionsContainer.appendChild(openBtn);
|
865 |
|
866 |
+
if (item.originalExtension.toLowerCase() === 'mp4') {
|
867 |
const embedBtn = document.createElement('button');
|
868 |
embedBtn.textContent = 'Embed';
|
869 |
embedBtn.className = 'small-btn';
|
|
|
920 |
quickOpenContent.appendChild(link);
|
921 |
}
|
922 |
|
923 |
+
quickOpenModal.style.display = "block";
|
924 |
}
|
925 |
</script>
|
926 |
</body>
|