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)