2021-08-31 19:07:19 +05:00
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1, maximum-scale=1" >
< title > File Storage< / title >
2021-09-24 23:01:35 +05:00
< link rel = "icon" href = "data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.1" stroke="none" viewBox="0 0 30 30"><path d="M 5,30 10,20 H 0 l 5,10" fill="#cc6666"/><path d="M 5,10 0,20 H 10 L 5,10" fill="#de935f"/><path d="M 15,20 20,10 H 10 l 5,10" fill="#f0c674"/><path d="M 15,0 10,10 H 20 L 15,0" fill="#b5bd68"/><path d="M 25,30 30,20 H 20 l 5,10" fill="#8abeb7"/><path d="M 25,10 20,20 H 30 L 25,10" fill="#81a2be"/></svg>" >
2021-08-31 19:07:19 +05:00
< style >
* {
font-family: Verdana;
font-size: 16px;
2021-09-22 11:20:46 +05:00
color: #abb2bf;
2021-08-31 19:07:19 +05:00
margin: .5em;
padding: 0;
}
html {
margin: 0;
padding: 0;
height: 100%
}
body {
2021-09-22 11:20:46 +05:00
background-color: #282c34;
2021-08-31 19:07:19 +05:00
display: flex;
2021-09-22 11:20:46 +05:00
justify-content: space-between;
2021-08-31 19:07:19 +05:00
flex-wrap: nowrap;
flex-direction: column;
height: 100%;
margin: 0;
padding: 0;
}
a {
text-decoration: none;
2021-09-22 11:20:46 +05:00
color: #61afef;
2021-08-31 19:07:19 +05:00
margin: 0;
}
svg, img {
vertical-align: middle;
width: 1em;
height: 1em;
2021-09-22 19:09:26 +05:00
margin: 0;
padding: 0;
2021-08-31 19:07:19 +05:00
}
2021-09-22 11:20:46 +05:00
header, footer {
flex-grow: 0;
background-color: #353b45;
2021-08-31 19:07:19 +05:00
padding: .5em;
margin: 0;
display: flex;
justify-content: space-between;
align-items: center;
}
2021-09-22 11:20:46 +05:00
main {
flex-grow: 1;
}
header {
border-bottom: 1px solid #3e4451;
}
2021-08-31 19:07:19 +05:00
footer {
2021-09-22 11:20:46 +05:00
border-top: 1px solid #3e4451;
font-size: 75%;
2021-08-31 19:07:19 +05:00
}
h1 {
margin-top: 1em;
font-size: 150%;
}
table {
border-collapse: collapse;
width: 100%;
margin: 0;
}
tr:hover {
2021-09-22 11:20:46 +05:00
background-color: #353b45;
2021-08-31 19:07:19 +05:00
}
th, td {
2021-09-22 11:20:46 +05:00
border: 1px solid #3e4451;
2021-08-31 19:07:19 +05:00
padding: 0.5em;
}
2021-09-22 11:27:06 +05:00
td:nth-child(2) {
2021-09-22 19:09:26 +05:00
width: 5em;
2021-09-22 11:27:06 +05:00
text-align: right;
}
td:nth-child(3) {
2021-09-22 19:09:26 +05:00
width: 6em;
2021-08-31 19:07:19 +05:00
text-align: right;
}
th {
2021-09-22 11:20:46 +05:00
background-color: #353b45;
2021-08-31 19:07:19 +05:00
}
form {
width: calc(100% - 1em);
}
form > input {
width: calc(100% - 2em);
padding: .5em;
}
button {
padding: .5em;
margin: 0;
}
pre {
margin: 0;
font-family: monospace;
}
input[type="file"] {
display: none;
}
label {
2021-09-22 11:20:46 +05:00
border-radius: 0.25em;
background-color: #61afef;
2021-08-31 19:07:19 +05:00
margin: 0;
padding: .5em;
cursor: pointer;
2021-09-22 19:09:26 +05:00
color: #fff;
2021-09-22 11:20:46 +05:00
text-shadow: 1px 1px 1px #000;
2021-08-31 19:07:19 +05:00
}
2021-09-22 19:07:53 +05:00
< / style >
2021-08-31 19:07:19 +05:00
< / head >
< body >
< header >
2021-09-22 19:09:26 +05:00
< span >
< svg version = "1.1" xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 15 15" fill = "#61afef" stroke = "#353b45" > < circle cx = "7.5" cy = "7.5" r = "5" fill = "none" stroke = "#61afef" / > < circle cx = "3" cy = "10" r = "2" / > < circle cx = "12" cy = "10" r = "2" / > < circle cx = "7.5" cy = "2.5" r = "2" / > < / svg >
File Storage
< / span >
2021-08-31 19:07:19 +05:00
< label >
< input id = "file-uploader" type = "file" id = "upload-button" >
Загрузить файл
< / label >
< / header >
< main >
< table >
< col width = "*" >
< col width = "0" >
< col width = "0" >
< tr >
2021-09-22 11:20:46 +05:00
< th > Имя файла< / th >
2021-08-31 19:07:19 +05:00
< th > Размер< / th >
< th > Дата< / th >
< / tr >
2021-09-22 19:09:26 +05:00
{{range .Files}} < tr >
< td > < img src = "/icon?ext={{.Ext}}" > < a href = "/download?filename={{.Name}}" > {{.Name}}< / a > < / td >
2021-08-31 19:07:19 +05:00
< td > < pre > {{.Size}}< / pre > < / td >
< td > {{.Date}}< / td >
< / tr >
{{end}} < / table >
< / main >
2021-09-22 19:09:26 +05:00
< footer >
Файлы хранятся как минимум {{.StorageDuration}} ч.
< / footer >
2021-08-31 19:07:19 +05:00
< / body >
< / html >
< script type = "text/javascript" >
function myProgressHandler(event) {
var p = Math.floor(event.loaded/event.total*100);
document.querySelector("label").innerHTML = 'Загрузка: ' + p + '%...';
}
function myOnLoadHandler(event) {
const response = event.currentTarget;
if (response.status != 200) {
alert('Ошибка при загрузке файла:\n' + response.responseText);
}
document.querySelector("label").innerHTML = 'Загрузка завершена.';
location.reload();
}
document.getElementById("file-uploader").addEventListener('change', (e) => {
var file = document.getElementById("file-uploader").files[0];
var formData = new FormData;
formData.append('file', file);
var ajax = new XMLHttpRequest;
ajax.upload.addEventListener("progress", myProgressHandler, false);
ajax.addEventListener('load', myOnLoadHandler, false);
ajax.open('POST', '/upload', true);
ajax.send(formData);
});
< / script >