enable photo file rename

This commit is contained in:
Philip Sargent
2022-08-11 21:19:52 +03:00
parent 25c425cff8
commit 3607b9f140
2 changed files with 37 additions and 6 deletions

View File

@@ -59,7 +59,11 @@ todo = '''
class FilesForm(forms.Form): # not a model-form, just a form-form
uploadfiles = forms.FileField()
class FilesRenameForm(forms.Form): # not a model-form, just a form-form
uploadfiles = forms.FileField()
renameto = forms.CharField(strip=True)
class TextForm(forms.Form): # not a model-form, just a form-form
photographer = forms.CharField(strip=True)
@@ -443,6 +447,13 @@ def photoupload(request, folder=None):
'''Upload photo image files into /expofiles/photos/<year>/<photographer>/
This does NOT use a Django model linked to a Django form. Just a simple Django form.
You will find the Django documentation on forms very confusing, This is simpler.
When uploading from a phone, it is useful to be able to rename the file to something
meaningful as this is difficult to do on a phone. Previously we had assumed files would
be renamed to something useful before starting the upload.
Unfortunately this only works when uploading one file at at time ,
inevitable once you think about it.
'''
year = settings.PHOTOS_YEAR
filesaved = False
@@ -472,7 +483,7 @@ def photoupload(request, folder=None):
urldir = f'/photoupload/{year}'
form = FilesForm()
form = FilesRenameForm()
formd = TextForm()
if request.method == 'POST':
@@ -482,24 +493,37 @@ def photoupload(request, folder=None):
newphotographer = request.POST["photographer"]
(yearpath / newphotographer).mkdir(exist_ok=True)
else:
form = FilesForm(request.POST,request.FILES)
form = FilesRenameForm(request.POST,request.FILES)
if form.is_valid():
f = request.FILES["uploadfiles"]
multiple = request.FILES.getlist('uploadfiles')
# NO CHECK that the files being uploaded are image files
fs = FileSystemStorage(dirpath)
renameto = request.POST["renameto"]
actual_saved = []
if multiple:
for f in multiple:
if len(multiple) == 1:
try: # crashes in Django os.chmod call if on WSL, but does save file!
saved_filename = fs.save(f.name, content=f)
saved_filename = fs.save(renameto, content=f)
except:
print(f'\n !! Permissions failure ?! on attempting to save file {f.name}')
if 'saved_filename' in locals():
if saved_filename.is_file():
actual_saved.append(saved_filename)
filesaved = True
else:
for f in multiple:
try: # crashes in Django os.chmod call if on WSL, but does save file!
saved_filename = fs.save(f.name, content=f)
except:
print(f'\n !! Permissions failure ?! on attempting to save file {f.name}')
if 'saved_filename' in locals():
if saved_filename.is_file():
actual_saved.append(saved_filename)
filesaved = True
files = []
dirs = []
try:
@@ -527,7 +551,7 @@ def dwgupload(request, folder=None, gitdisable='no'):
This does NOT use a Django model linked to a Django form. Just a simple Django form.
You will find the Django documentation on forms very confusing, This is simpler.
Need to validate it as being a valid GPX file using an XML parser, not a dubious script or hack
We could validate the uploaded files as being a valid files using an XML parser, not a dubious script or hack
We use get_or_create instead of simply creating a new object in case someone uploads the same file