diff --git a/conservancy/ccs_upload/views.py b/conservancy/ccs_upload/views.py new file mode 100644 index 0000000000000000000000000000000000000000..ba203c1dc4bfb7f2daac67df8e08dbec111f13c3 --- /dev/null +++ b/conservancy/ccs_upload/views.py @@ -0,0 +1,38 @@ +import logging +import os +import random + +from django.contrib import messages +from django.shortcuts import redirect, render + +from .forms import UploadForm + +CCS_UPLOAD_PATH = '/tmp/' + +logger = logging.getLogger(__name__) + + +def upload(request): + if request.method == 'POST': + form = UploadForm(request.POST, request.FILES) + if form.is_valid(): + file = request.FILES['file'] + _handle_uploaded_file(file) + messages.add_message(request, messages.INFO, '"{}" was successfully uploaded.'.format(file.name)) + return redirect('ccs_upload:form') + else: + form = UploadForm() + return render(request, 'ccs_upload/upload.html', {'form': form}) + + +def _handle_uploaded_file(f): + filename = _hash_prefixed_filename(f.name) + path = os.path.join(CCS_UPLOAD_PATH, filename) + with open(path, 'wb+') as destination: + for chunk in f.chunks(): + destination.write(chunk) + logger.info('Wrote uploaded file to {}.'.format(path)) + + +def _hash_prefixed_filename(name): + return '{hash:x} {name}'.format(hash=random.getrandbits(32), name=name)