From f2861ca2bcd56569b8b1d0b1330039bdea3eda47 Mon Sep 17 00:00:00 2001 From: Andrea Lepori Date: Fri, 28 Aug 2020 20:42:08 +0200 Subject: upload multiple files --- accounts/templates/accounts/index.html | 22 +++++++++++++-------- accounts/views.py | 36 ++++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 14 deletions(-) diff --git a/accounts/templates/accounts/index.html b/accounts/templates/accounts/index.html index 7f1f449..2c06113 100644 --- a/accounts/templates/accounts/index.html +++ b/accounts/templates/accounts/index.html @@ -253,7 +253,7 @@
file_uploadFile - +
@@ -273,7 +273,7 @@
file_uploadFile - +
@@ -354,16 +354,22 @@ $(document).ready(function() { {% endif %} document.getElementById("vac_certificate").onchange = function() { - if(this.files[0].size > 1048576*10){ - M.toast({html: 'Il file è troppo grande. Grandezza massima 10MB', classes: 'orange'}); - this.value = ""; + for (i=0; i < this.files.length; i++) { + if(this.files[i].size > 1048576*10) { + M.toast({html: 'Il file è troppo grande. Grandezza massima 10MB', classes: 'orange'}); + this.value = ""; + break; + } } }; document.getElementById("health_care_certificate").onchange = function() { - if(this.files[0].size > 1048576*10){ - M.toast({html: 'Il file è troppo grande. Grandezza massima 10MB', classes: 'orange'}); - this.value = ""; + for (i=0; i < this.files.length; i++) { + if(this.files[i].size > 1048576*10) { + M.toast({html: 'Il file è troppo grande. Grandezza massima 10MB', classes: 'orange'}); + this.value = ""; + break; + } } }; diff --git a/accounts/views.py b/accounts/views.py index 9b5884b..9bdfacf 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -147,28 +147,52 @@ def personal(request): # check if user uploaded a file if "vac_certificate" in request.FILES: - myfile = request.FILES['vac_certificate'] + files = request.FILES.getlist('vac_certificate') + name = files[0].name try: - im = Image.open(myfile) + # if multiple files concatenate pictures + if len(files) == 1: + im = Image.open(files[0]) + else: + im = Image.open(files.pop(0)) + for f in files: + i = Image.open(f) + dst = Image.new('RGB', (im.width + i.width, max(im.height, i.height)), (255, 255, 255)) + dst.paste(im, (0, 0)) + dst.paste(i, (im.width, 0)) + im = dst + im_io = BytesIO() # compress image in WEBP im.save(im_io, 'WEBP', quality=50, method=4) medic.vac_certificate.save( - request.user.username+"_"+myfile.name, im_io) + request.user.username+"_"+name, im_io) medic.save() except UnidentifiedImageError: error = True error_text = "Il file non è un immagine valida" if "health_care_certificate" in request.FILES: - myfile = request.FILES['health_care_certificate'] + files = request.FILES.getlist('health_care_certificate') + name = files[0].name try: - im = Image.open(myfile) + # if multiple files concatenate pictures + if len(files) == 1: + im = Image.open(files[0]) + else: + im = Image.open(files.pop(0)) + for f in files: + i = Image.open(f) + dst = Image.new('RGB', (im.width + i.width, max(im.height, i.height)), (255, 255, 255)) + dst.paste(im, (0, 0)) + dst.paste(i, (im.width, 0)) + im = dst + im_io = BytesIO() # compress image in WEBP im.save(im_io, 'WEBP', quality=50, method=4) medic.health_care_certificate.save( - request.user.username+"_"+myfile.name, im_io) + request.user.username+"_"+name, im_io) medic.save() except UnidentifiedImageError: error = True -- cgit v1.2.1