urlo upload as js function

This commit is contained in:
Ville Rantanen
2018-03-15 16:04:24 +02:00
parent 86c855285c
commit 167c58d127
5 changed files with 92 additions and 38 deletions

View File

@@ -184,7 +184,9 @@ def upload_url():
) )
if os.path.exists(filename): if os.path.exists(filename):
file_versionize(filename) file_versionize(filename)
download_url(url, filename) ok,error = download_url(url, filename)
if not ok:
return error
set_rights(filename) set_rights(filename)
notify({ notify({
"recipient": get_or_none('recipient', share), "recipient": get_or_none('recipient', share),

View File

@@ -110,6 +110,7 @@ tr:nth-child(odd) {
} }
#list_url_upload_button { #list_url_upload_button {
float: right; float: right;
cursor: pointer;
} }
#list_info_toggle { #list_info_toggle {

View File

@@ -8,15 +8,15 @@ function clear_text(id,defaultValue) {
function index_form_enter(event) { function index_form_enter(event) {
if (event.which || event.keyCode) { if (event.which || event.keyCode) {
if ((event.which == 13) || (event.keyCode == 13)) { if ((event.which == 13) || (event.keyCode == 13)) {
index_form_submit(); index_form_submit();
} }
}; };
} }
function index_form_submit() { function index_form_submit() {
window.location = window.location + "/list/" + window.location = window.location + "/list/" +
document.getElementById("index_form_name").value; document.getElementById("index_form_name").value;
} }
@@ -39,25 +39,28 @@ function UploadFile(file,file_no,files_total) {
return return
} }
var file_counter = "(" + (file_no + 1) + "/" + files_total + ") "; var file_counter = "(" + (file_no + 1) + "/" + files_total + ") ";
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
if (xhr.upload) { if (xhr.upload) {
var o = document.getElementById("progress");
var o = document.getElementById("progress"); xhr.upload.addEventListener(
xhr.upload.addEventListener("progress", function(e) { "progress",
var pc = parseInt((e.loaded / e.total * 100)); function(e) {
o.className = ""; var pc = parseInt((e.loaded / e.total * 100));
o.innerHTML = "Uploading: " + file_counter + pc + "%"; o.className = "";
if (pc == 100) { o.innerHTML = "Uploading: " + file_counter + pc + "%";
o.innerHTML = "Finishing up " + file_counter + "wait ..."; if (pc == 100) {
} o.innerHTML = "Finishing up " + file_counter + "wait ...";
// upload works, hide button }
document.getElementById("list_upload_button").hidden = true; // upload works, hide button
}, false); document.getElementById("list_upload_button").hidden = true;
},
false
);
// file received/failed // file received/failed
xhr.onreadystatechange = function(e) { xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) { if (xhr.readyState == 4) {
o.className = (xhr.status == 200 ? "success" : "failure"); o.className = (xhr.status == 200 ? "success" : "failure");
if (xhr.status == 200) { if (xhr.status == 200) {
if (file_no + 1 == files_total) { if (file_no + 1 == files_total) {
location = location; location = location;
@@ -66,32 +69,74 @@ function UploadFile(file,file_no,files_total) {
o.innerHTML = xhr.response; o.innerHTML = xhr.response;
} }
uploadTurn += 1; uploadTurn += 1;
} }
}; };
// start upload // start upload
xhr.open("POST", document.getElementById("upload_form").action, true); xhr.open("POST", document.getElementById("upload_form").action, true);
xhr.setRequestHeader("X-FILENAME", file.name); xhr.setRequestHeader("X-FILENAME", file.name);
var formData = new FormData(); var formData = new FormData();
formData.append('name', document.getElementById("list_upload_name").value); formData.append('name', document.getElementById("list_upload_name").value);
formData.append('from_gui', 'true'); formData.append('from_gui', 'true');
formData.append('file', file); formData.append('file', file);
xhr.send(formData); xhr.send(formData);
} }
} }
// file selection // file selection
function FileSelectHandler(e) { function FileSelectHandler(e) {
// fetch FileList object // fetch FileList object
var files = e.target.files || e.dataTransfer.files; var files = e.target.files || e.dataTransfer.files;
uploadTurn = 0; uploadTurn = 0;
// process all File objects // process all File objects
for (var i = 0, f; f = files[i]; i++) { for (var i = 0, f; f = files[i]; i++) {
UploadFile(f,i,files.length); UploadFile(f,i,files.length);
} }
} }
// Variable to stop parallel uploads // Variable to stop parallel uploads
var uploadTurn = -1; var uploadTurn = -1;
function UploadURL() {
var URL = document.getElementById("list_url_upload_text").value;
var xhr = new XMLHttpRequest();
if (xhr.upload) {
var o = document.getElementById("progress");
xhr.upload.addEventListener(
"progress",
function(e) {
o.className = "";
o.innerHTML = "Uploading...";
console.log(e);
// upload works, hide button
document.getElementById("list_url_upload_button").setAttribute("disabled", "disabled");
},
false
);
// file received/failed
xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) {
o.className = (xhr.status == 200 ? "success" : "failure");
if (xhr.status == 200) {
// refresh page at upload finish
location = location;
} else {
o.innerHTML = xhr.response;
document.getElementById("list_url_upload_button").removeAttribute("disabled");
}
}
};
// start upload
xhr.open("POST", document.getElementById("url_upload_form").action, true);
var formData = new FormData();
formData.append('name', document.getElementById("list_upload_name").value);
formData.append('from_gui', 'true');
formData.append('url', URL);
xhr.send(formData);
}
}

View File

@@ -26,9 +26,9 @@
<input type=hidden name=from_gui value="true" /> <input type=hidden name=from_gui value="true" />
<input id="list_url_upload_text" type=text name=url <input id="list_url_upload_text" type=text name=url
value="https://..." onclick="clear_text(this.id,'https://...')"><br> value="https://..." onclick="clear_text(this.id,'https://...')"><br>
<input id="list_url_upload_button" type=submit value="Upload URL">
<div class="clear"></div>
</form> </form>
<input id="list_url_upload_button" type=submit value="Upload URL" onclick="UploadURL()">
<div class="clear"></div>
</div> </div>
<ul> <ul>

View File

@@ -5,16 +5,22 @@ try:
from urllib.request import pathname2url from urllib.request import pathname2url
from urllib.request import URLopener from urllib.request import URLopener
from urllib.request import urlparse from urllib.request import urlparse
from urllib.error import HTTPError
except ImportError: except ImportError:
from urllib import pathname2url from urllib import pathname2url
from urllib import URLopener from urllib import URLopener
from urlparse import urlparse from urlparse import urlparse
from urllib2 import HTTPError
def download_url(url,filename): def download_url(url,filename):
downloader = URLopener() downloader = URLopener()
downloader.retrieve(url, filename) try:
return downloader.retrieve(url, filename)
except HTTPError as e:
return (False, ("%s %s"%(e.code,e.reason), e.code))
return (True, ("OK", 200 ))
def file_date_human(num): def file_date_human(num):
return datetime.fromtimestamp( return datetime.fromtimestamp(