def clean_dir_name(self): if self.cleaned_data['dir_name']: # only letters, numbers, underscores, spaces and hyphens are allowed. if not alnum_name_re.search(self.cleaned_data['dir_name']): raise forms.ValidationError(_(u'Only letters, numbers, underscores, spaces and hyphens are allowed.')) # Folder must not already exist. if os.path.isdir(os.path.join(self.path, convert_filename(self.cleaned_data['dir_name']))): raise forms.ValidationError(_(u'The Folder already exists.')) return convert_filename(self.cleaned_data['dir_name'])
def clean_dir_name(self): if self.cleaned_data['name']: # only letters, numbers, underscores, spaces and hyphens are allowed. if not alnum_name_re.search(self.cleaned_data['name']): raise forms.ValidationError(_(u'Only letters, numbers, underscores, spaces and hyphens are allowed.')) # Folder must not already exist. if os.path.isdir(os.path.join(self.path, convert_filename(self.cleaned_data['name']))): raise forms.ValidationError(_(u'The Folder already exists.')) return convert_filename(self.cleaned_data['name'])
def _upload_file(self, request): """ Upload file to the server. """ if request.method == "POST": if request.is_ajax(): # Advanced (AJAX) submission folder = request.GET.get('folder') filedata = ContentFile(request.raw_post_data) try: filedata.name = convert_filename(request.GET['qqfile']) except KeyError: return HttpResponseBadRequest( 'Invalid request! No filename given.') else: # Basic (iframe) submission # TODO: This needs some attention, do we use this at all? folder = request.POST.get('folder') if len(request.FILES) == 1: filedata = request.FILES.values()[0] else: raise Http404('Invalid request! Multiple files included.') # filedata.name = convert_filename(upload.name) filedata.name = convert_filename(request.POST.get('file_name')) fb_uploadurl_re = re.compile( r'^.*(%s)' % reverse("filebrowser:fb_upload", current_app=self.name)) folder = fb_uploadurl_re.sub('', folder) path = os.path.join(self.directory, folder) file_name = os.path.join(path, filedata.name) file_already_exists = self.storage.exists(file_name) # Check for name collision with a directory if file_already_exists and self.storage.isdir(file_name): ret_json = {'success': False, 'filename': filedata.name} return HttpResponse(json.dumps(ret_json)) self.filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata) uploadedfile = handle_file_upload(path, filedata, site=self) if file_already_exists: old_file = smart_unicode(file_name) new_file = smart_unicode(uploadedfile) self.storage.move(new_file, old_file, allow_overwrite=True) self.filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject( smart_unicode(file_name), site=self)) # let Ajax Upload know whether we saved it or not ret_json = {'success': True, 'filename': filedata.name} return HttpResponse(json.dumps(ret_json))
def _upload_file(self, request): """ Upload file to the server. """ if request.method == "POST": folder = request.GET.get('folder', '') if request.is_ajax(): # Advanced (AJAX) submission filedata = ContentFile(request.raw_post_data) else: # Basic (iframe) submission if len(request.FILES) != 1: raise Http404('Invalid request! Multiple files included.') filedata = request.FILES.values()[0] try: filedata.name = convert_filename(request.GET['qqfile']) except KeyError: return HttpResponseBadRequest('Invalid request! No filename given.') else: # Basic (iframe) submission # TODO: This needs some attention, do we use this at all? folder = request.POST.get('folder') if len(request.FILES) == 1: filedata = request.FILES.values()[0] else: raise Http404('Invalid request! Multiple files included.') # filedata.name = convert_filename(upload.name) filedata.name = convert_filename(request.POST.get('file_name')) fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("filebrowser:fb_upload", current_app=self.name)) folder = fb_uploadurl_re.sub('', folder) path = os.path.join(self.directory, folder) file_name = os.path.join(path, filedata.name) file_already_exists = self.storage.exists(file_name) # Check for name collision with a directory if file_already_exists and self.storage.isdir(file_name): ret_json = {'success': False, 'filename': filedata.name} return HttpResponse(json.dumps(ret_json)) signals.filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata, site=self) uploadedfile = handle_file_upload(path, filedata, site=self) if file_already_exists and OVERWRITE_EXISTING: old_file = smart_unicode(file_name) new_file = smart_unicode(uploadedfile) self.storage.move(new_file, old_file, allow_overwrite=True) else: file_name = smart_unicode(uploadedfile) signals.filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject(smart_unicode(file_name), site=self), site=self) # let Ajax Upload know whether we saved it or not ret_json = {'success': True, 'filename': filedata.name} return HttpResponse(json.dumps(ret_json))
def clean_name(self): if self.cleaned_data['name']: # only letters, numbers, underscores, spaces and hyphens are allowed. if not alnum_name_re.search(self.cleaned_data['name']): raise forms.ValidationError(_(u'Only letters, numbers, underscores, spaces and hyphens are allowed.')) # folder/file must not already exist. if self.site.storage.isdir(os.path.join(self.path, convert_filename(self.cleaned_data['name']))) and os.path.join(self.path, convert_filename(self.cleaned_data['name'])) != self.fileobject.path: raise forms.ValidationError(_(u'The Folder already exists.')) elif self.site.storage.isfile(os.path.join(self.path, convert_filename(self.cleaned_data['name']))) and os.path.join(self.path, convert_filename(self.cleaned_data['name'])) != self.fileobject.path: raise forms.ValidationError(_(u'The File already exists.')) return convert_filename(self.cleaned_data['name'])
def clean_name(self): if self.cleaned_data["name"]: # only letters, numbers, underscores, spaces and hyphens are allowed. if not alnum_name_re.search(self.cleaned_data["name"]): raise forms.ValidationError(_(u"Only letters, numbers, underscores, spaces and hyphens are allowed.")) # folder/file must not already exist. if os.path.isdir(os.path.join(self.path, convert_filename(self.cleaned_data["name"]))): raise forms.ValidationError(_(u"The Folder already exists.")) elif os.path.isfile( os.path.join(self.path, convert_filename(self.cleaned_data["name"]) + self.file_extension) ): raise forms.ValidationError(_(u"The File already exists.")) return convert_filename(self.cleaned_data["name"])
def clean_name(self): if self.cleaned_data['name']: # only letters, numbers, underscores, # spaces and hyphens are allowed. if not alnum_name_re.search(self.cleaned_data['name']): raise forms.ValidationError( _('Only letters, numbers, underscores, ' 'spaces and hyphens are allowed.') ) # folder/file must not already exist. if os.path.isdir(os.path.join(self.path, convert_filename(self.cleaned_data['name']))): raise forms.ValidationError(_('The Folder already exists.')) elif os.path.isfile(os.path.join(self.path, convert_filename(self.cleaned_data['name']) + self.file_extension)): raise forms.ValidationError(_('The File already exists.')) return convert_filename(self.cleaned_data['name'])
def createdir(self, request): """ Create Directory. """ from filebrowser.forms import CreateDirForm query = request.GET path = u'%s' % os.path.join(self.directory, convert_filename(query.get('dir', ''))) if request.method == 'POST': form = CreateDirForm(path, request.POST, filebrowser_site=self) if form.is_valid(): server_path = os.path.join(path, form.cleaned_data['name']) try: self.filebrowser_pre_createdir.send(sender=request, path=server_path, name=form.cleaned_data['name']) self.storage.makedirs(server_path) # os.mkdir(server_path) # os.chmod(server_path, 0775) # ??? PERMISSIONS self.filebrowser_post_createdir.send(sender=request, path=server_path, name=form.cleaned_data['name']) messages.add_message(request, messages.SUCCESS, _('The Folder %s was successfully created.') % form.cleaned_data['name']) redirect_url = reverse("filebrowser:fb_browse", current_app=self.name) + query_helper(query, "ot=desc,o=date", "ot,o,filter_type,filter_date,q,p") return HttpResponseRedirect(redirect_url) except OSError, (errno, strerror): if errno == 13: form.errors['name'] = forms.util.ErrorList([_('Permission denied.')]) else: form.errors['name'] = forms.util.ErrorList([_('Error creating folder.')])
def _check_file(request): """ Check if file already exists on the server. """ logger.info('_check_file') import json try: folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) fileArray = {} if request.method == 'POST': for k, v in request.POST.items(): if k != "folder": v = convert_filename(v) if os.path.isfile( smart_str(_check_access(request, folder, v))): fileArray[k] = v filearray_json = json.dumps(fileArray) logger.info('_check file returning: %s', filearray_json) except Exception as exc: logger.error(exc) return HttpResponse(json.dumps(fileArray))
def clean_file(self): if self.cleaned_data['file']: filename = convert_filename(self.cleaned_data['file'].name) # CHECK IF FILE EXISTS dir_list = os.listdir(self.path) if filename in dir_list: raise forms.ValidationError(_(u'File already exists.')) # TODO: CHECK IF VERSIONS_PATH EXISTS (IF USE_IMAGE_GENERATOR IS TRUE) # CHECK FILENAME if not alnum_name_re.search(filename): raise forms.ValidationError(_(u'Filename is not allowed.')) # CHECK EXTENSION / FILE_TYPE file_type = get_file_type(filename) if not file_type: raise forms.ValidationError(_(u'File extension is not allowed.')) # CHECK FILESIZE filesize = self.cleaned_data['file'].size if filesize > MAX_UPLOAD_SIZE: raise forms.ValidationError(_(u'Filesize exceeds allowed Upload Size.')) return self.cleaned_data['file']
def _upload_file(request): """ Upload file to the server. """ from django.core.files.move import file_move_safe if request.method == 'POST': folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) abs_path = _check_access(request, folder) if request.FILES: filedata = request.FILES['Filedata'] filedata.name = convert_filename(filedata.name) _check_access(request, abs_path, filedata.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, filedata) # MOVE UPLOADED FILE # if file already exists if os.path.isfile(smart_str(os.path.join(fb_settings.MEDIA_ROOT, fb_settings.DIRECTORY, folder, filedata.name))): old_file = smart_str(os.path.join(abs_path, filedata.name)) new_file = smart_str(os.path.join(abs_path, uploadedfile)) file_move_safe(new_file, old_file) # POST UPLOAD SIGNAL filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject(smart_str(os.path.join(fb_settings.DIRECTORY, folder, filedata.name)))) return HttpResponse('True')
def _upload_file(request): """ Upload file to the server. """ from django.core.files.move import file_move_safe from django.http import QueryDict if request.method == 'POST': query = QueryDict(request.POST.get('get_query')) folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, folder) if request.FILES: filedata = request.FILES['Filedata'] filedata.name = convert_filename(filedata.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, filedata) # MOVE UPLOADED FILE # if file already exists if os.path.isfile(os.path.join(MEDIA_ROOT, DIRECTORY, folder, filedata.name)): old_file = os.path.join(abs_path, filedata.name) new_file = os.path.join(abs_path, uploadedfile) file_move_safe(new_file, old_file) # POST UPLOAD SIGNAL filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject(os.path.join(DIRECTORY, folder, filedata.name))) return HttpResponseRedirect(reverse("fb_browse") + query_helper(query, "", "filename,filetype")) else: return HttpResponse("Error: No files were posted") else: return HttpResponse("Error: No POST data")
def _upload_file(self, request): """ Upload file to the server. """ from django.core.files.move import file_move_safe if request.method == 'POST': folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("filebrowser:fb_upload", current_app=self.name)) folder = fb_uploadurl_re.sub('', folder) abs_path = os.path.join(self.media_root, folder) if request.FILES: filedata = request.FILES['Filedata'] filedata.name = convert_filename(filedata.name) self.filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata) uploadedfile = handle_file_upload(abs_path, filedata, media_root=self.media_root) # if file already exists if os.path.isfile(smart_unicode(os.path.join(self.media_root, folder, filedata.name))): old_file = smart_unicode(os.path.join(abs_path, filedata.name)) new_file = smart_unicode(os.path.join(abs_path, uploadedfile)) file_move_safe(new_file, old_file, allow_overwrite=True) # POST UPLOAD SIGNAL self.filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject(smart_unicode(os.path.join(folder, filedata.name)), media_root=self.media_root, media_url=self.media_url)) return HttpResponse('True')
def _upload_file(request): """ Upload file to the server. """ from django.core.files.move import file_move_safe if request.method == 'POST': folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, folder) if request.FILES: filedata = request.FILES['Filedata'] filedata.name = convert_filename(filedata.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, filedata) # MOVE UPLOADED FILE # if file already exists if os.path.isfile(os.path.join(MEDIA_ROOT, DIRECTORY, folder, filedata.name)): old_file = os.path.join(abs_path, filedata.name) new_file = os.path.join(abs_path, uploadedfile) file_move_safe(new_file, old_file) # POST UPLOAD SIGNAL filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject(os.path.join(DIRECTORY, folder, filedata.name))) return HttpResponse('True')
def _process_fileupload(request, file, target_folder): """Helper that is called upon a successful fileupload with the file object, and a target folder. """ abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, target_folder) file.name = convert_filename(file.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=target_folder, file=file) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, file) # MOVE UPLOADED FILE # if file already exists if os.path.isfile( os.path.join(MEDIA_ROOT, DIRECTORY, target_folder, file.name)): old_file = os.path.join(abs_path, file.name) new_file = os.path.join(abs_path, uploadedfile) file_move_safe(new_file, old_file) # POST UPLOAD SIGNAL # TODO: Do something about the fileobject class. filebrowser_post_upload.send(sender=request, path=target_folder, file=FileObject( os.path.join(DIRECTORY, target_folder, file.name)))
def _check_file(request): """ Check if file already exists on the server. """ from django.utils import simplejson folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) fileArray = {} if request.method == 'POST': for k, v in request.POST.items(): if k != "folder": v = convert_filename(v) #print MEDIA_ROOT, DIRECTORY, folder, v, os.path.join(MEDIA_ROOT, DIRECTORY, folder, v) if os.path.isfile( smart_str( os.path.join(MEDIA_ROOT, DIRECTORY, folder.strip('/'), v))): fileArray[k] = v return HttpResponse(simplejson.dumps(fileArray))
def upload(request): """ Multiple File Upload. """ from django.forms.formsets import formset_factory # QUERY / PATH CHECK query = request.GET path = get_path(query.get('dir', '')) if path is None: msg = _('The requested Folder does not exist.') messages.add_message(request, messages.ERROR, msg) return HttpResponseRedirect(reverse("fb_browse")) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path) if STRICT_PIL: from PIL import ImageFile else: try: from PIL import ImageFile except ImportError: import ImageFile ImageFile.MAXBLOCK = IMAGE_MAXBLOCK # default is 64k from filebrowser.forms import UploadForm, BaseUploadFormSet UploadFormSet = formset_factory(UploadForm, formset=BaseUploadFormSet, extra=5) if request.method == 'POST': formset = UploadFormSet(data=request.POST, files=request.FILES, path=abs_path) if formset.is_valid(): for cleaned_data in formset.cleaned_data: if cleaned_data: f = cleaned_data['file'] f.name = convert_filename(f.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=abs_path, file=f) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, f) # POST UPLOAD SIGNAL filebrowser_post_upload.send(sender=request, path=abs_path, file=uploadedfile) # MESSAGE & REDIRECT msg = _('Upload successful.') messages.add_message(request, messages.INFO, msg) # on redirect, sort by date desc to see the uploaded files on top of the list redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o") return HttpResponseRedirect(redirect_url) else: formset = UploadFormSet(path=abs_path) return render_to_response('filebrowser/upload.html', { 'formset': formset, 'dir': path, 'query': query, 'settings_var': get_settings_var(), 'breadcrumbs_title': _(u'Upload'), 'title': _(u'Select files to upload'), }, context_instance=Context(request))
def upload(request): """ Multiple File Upload. """ from django.forms.formsets import formset_factory # QUERY / PATH CHECK query = request.GET path = get_path(query.get('dir', '')) if path is None: msg = _('The requested Folder does not exist.') request.user.message_set.create(message=msg) return HttpResponseRedirect(reverse("fb_browse")) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path) if STRICT_PIL: from PIL import ImageFile else: try: from PIL import ImageFile except ImportError: import ImageFile ImageFile.MAXBLOCK = IMAGE_MAXBLOCK # default is 64k from filebrowser.forms import UploadForm, BaseUploadFormSet UploadFormSet = formset_factory(UploadForm, formset=BaseUploadFormSet, extra=5) if request.method == 'POST': formset = UploadFormSet(data=request.POST, files=request.FILES, path=abs_path) if formset.is_valid(): for cleaned_data in formset.cleaned_data: if cleaned_data: f = cleaned_data['file'] f.name = convert_filename(f.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=abs_path, file=f) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, f) # POST UPLOAD SIGNAL filebrowser_post_upload.send(sender=request, path=abs_path, file=uploadedfile) # MESSAGE & REDIRECT msg = _('Upload successful.') request.user.message_set.create(message=msg) # on redirect, sort by date desc to see the uploaded files on top of the list redirect_url = reverse("fb_browse") + query_helper(query, "ot=desc,o=date", "ot,o") return HttpResponseRedirect(redirect_url) else: formset = UploadFormSet(path=abs_path) return render_to_response('filebrowser/upload.html', { 'formset': formset, 'dir': path, 'query': query, 'settings_var': get_settings_var(), 'breadcrumbs_title': _(u'Upload'), 'title': _(u'Select files to upload'), }, context_instance=Context(request))
def _upload_file(self, request): """ Upload file to the server. """ from django.core.files.move import file_move_safe if request.method == "POST": if request.is_ajax(): # Advanced (AJAX) submission folder = request.GET.get("folder") filedata = ContentFile(request.raw_post_data) try: filedata.name = convert_filename(request.GET["qqfile"]) except KeyError: return HttpResponseBadRequest("Invalid request! No filename given.") else: # Basic (iframe) submission folder = request.POST.get("folder") if len(request.FILES) == 1: filedata = request.FILES.values()[0] else: raise Http404("Invalid request! Multiple files included.") filedata.name = convert_filename(upload.name) fb_uploadurl_re = re.compile(r"^.*(%s)" % reverse("filebrowser:fb_upload", current_app=self.name)) folder = fb_uploadurl_re.sub("", folder) abs_path = os.path.join(self.media_root, folder) self.filebrowser_pre_upload.send(sender=request, path=request.POST.get("folder"), file=filedata) uploadedfile = handle_file_upload(abs_path, filedata, media_root=self.media_root) # if file already exists if os.path.isfile(smart_unicode(os.path.join(self.media_root, folder, filedata.name))): old_file = smart_unicode(os.path.join(abs_path, filedata.name)) new_file = smart_unicode(os.path.join(abs_path, uploadedfile)) file_move_safe(new_file, old_file, allow_overwrite=True) self.filebrowser_post_upload.send( sender=request, path=request.POST.get("folder"), file=FileObject( smart_unicode(os.path.join(folder, filedata.name)), media_root=self.media_root, media_url=self.media_url, ), ) # let Ajax Upload know whether we saved it or not ret_json = {"success": True, "filename": filedata.name} return HttpResponse(json.dumps(ret_json))
def _upload_file(request): """ Upload file to the server. """ from django.core.files.move import file_move_safe if request.method == "POST": if request.is_ajax(): # Advanced (AJAX) submission folder = request.GET.get('folder') filedata = ContentFile(request.raw_post_data) try: filedata.name = convert_filename(request.GET['qqfile']) except KeyError: return HttpResponseBadRequest('Invalid request! No filename given.') else: # Basic (iframe) submission folder = request.POST.get('folder') if len(request.FILES) == 1: filedata = request.FILES.values()[0] else: raise Http404('Invalid request! Multiple files included.') filedata.name = convert_filename(upload.name) fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, folder) filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata) uploadedfile = handle_file_upload(abs_path, filedata) # if file already exists if os.path.isfile(smart_str(os.path.join(MEDIA_ROOT, DIRECTORY, folder, filedata.name))): old_file = smart_str(os.path.join(abs_path, filedata.name)) new_file = smart_str(os.path.join(abs_path, uploadedfile)) file_move_safe(new_file, old_file, allow_overwrite=True) filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject(smart_str(os.path.join(DIRECTORY, folder, filedata.name)))) # let Ajax Upload know whether we saved it or not ret_json = {'success': True, 'filename': filedata.name} return HttpResponse(json.dumps(ret_json))
def save(self): klass = self.get_model_class() instance = klass(name=self.cleaned_data["name"]) abs_path = os.path.join(settings.MEDIA_ROOT, klass._meta.get_field_by_name(instance.media_file_field)[0].directory) f = self.cleaned_data['file'] f.name = convert_filename(f.name) name = handle_file_upload(abs_path, f) setattr(instance, instance.media_file_field, name) instance.save() return instance
def handle_file_save(directory, multimedia): """ DRY file upload for pictures_create and embed_create """ # normalize file name multimedia.name = convert_filename(multimedia.name) multimedia_folder = _get_todays_folder(directory) abs_path = os.path.join(settings.MEDIA_ROOT, multimedia_folder) uploaded_path = handle_file_upload(abs_path, multimedia) # uploaded path can be different from name ex. if path already exists uploaded_path_name = uploaded_path.split(multimedia_folder)[1] url = "%s/%s" % (multimedia_folder, uploaded_path_name) url = url.replace('//', '/') objeto = FileObject(url) return objeto
def clean_name(self): if self.cleaned_data['name']: # only letters, numbers, underscores, spaces and hyphens are allowed. if not alnum_name_re.search(self.cleaned_data['name']): raise forms.ValidationError( _(u'Only letters, numbers, underscores, spaces and hyphens are allowed.' )) # folder/file must not already exist. if self.site.storage.isdir( os.path.join(self.path, convert_filename(self.cleaned_data['name'])) ) and os.path.join( self.path, convert_filename( self.cleaned_data['name'])) != self.fileobject.path: raise forms.ValidationError(_(u'The Folder already exists.')) elif self.site.storage.isfile( os.path.join(self.path, convert_filename(self.cleaned_data['name'])) ) and os.path.join( self.path, convert_filename( self.cleaned_data['name'])) != self.fileobject.path: raise forms.ValidationError(_(u'The File already exists.')) return convert_filename(self.cleaned_data['name'])
def _upload_file(request): """ Upload file to the server. """ logger.info('_upload_file') from django.core.files.move import file_move_safe if request.method == 'POST': try: folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) abs_path = _check_access(request, folder) if request.FILES: filedata = request.FILES['Filedata'] filedata.name = convert_filename(filedata.name) logger.info('file data: %s', filedata) _check_access(request, abs_path, filedata.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, filedata) # MOVE UPLOADED FILE # if file already exists if os.path.isfile( smart_str( os.path.join(fb_settings.MEDIA_ROOT, fb_settings.DIRECTORY, folder, filedata.name))): old_file = smart_str(os.path.join(abs_path, filedata.name)) new_file = smart_str(os.path.join(abs_path, uploadedfile)) file_move_safe(new_file, old_file, allow_overwrite=True) # POST UPLOAD SIGNAL filebrowser_post_upload.send( sender=request, path=request.POST.get('folder'), file=FileObject( smart_str( os.path.join(fb_settings.DIRECTORY, folder, filedata.name)))) except Exception as exc: logger.error(exc) return HttpResponse('True')
def _check_file(request): """ Check if file already exists on the server. """ import json folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) fileArray = {} if request.method == 'POST': for k,v in request.POST.items(): if k != "folder": v = convert_filename(v) if os.path.isfile(smart_str(_check_access(request, folder, v))): fileArray[k] = v return HttpResponse(json.dumps(fileArray))
def _check_file(request): """ Check if file already exists on the server. """ from django.utils import simplejson folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) fileArray = {} if request.method == 'POST': for k,v in request.POST.items(): if k != "folder": v = convert_filename(v) if os.path.isfile(smart_unicode(os.path.join(MEDIA_ROOT, DIRECTORY, folder, v))): fileArray[k] = v return HttpResponse(simplejson.dumps(fileArray))
def _check_file(request): """ Check if file already exists on the server. """ import json folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) fileArray = {} if request.method == 'POST': for k, v in request.POST.items(): if k != "folder": v = convert_filename(v) if os.path.isfile(smart_str(_check_access(request, folder, v))): fileArray[k] = v return HttpResponse(json.dumps(fileArray))
def _check_file(request): """ Check if file already exists on the server. """ folder = request.GET.get('folder') fb_uploadurl_re = re.compile(r'^.*({0})'.format(reverse("fb_upload"))) folder = fb_uploadurl_re.sub('', folder) success = True if request.method == 'POST': for k, v in request.POST.items(): if k != "folder": v = convert_filename(v) if os.path.isfile(smart_str(_check_access(request, folder, v))): success = False break return JsonResponse({'success': success})
def _check_file(request): """ Check if file already exists on the server. """ folder = request.GET.get('folder') fb_uploadurl_re = re.compile(r'^.*({0})'.format(reverse("fb_upload"))) folder = fb_uploadurl_re.sub('', folder) success = True if request.method == 'POST': for k, v in request.POST.items(): if k != "folder": v = convert_filename(v) if os.path.isfile( smart_str(_check_access(request, folder, v))): success = False break return JsonResponse({'success': success})
def decorator(request, *args, **kwargs): if get_path('', site=site) == None: # The DIRECTORY does not exist, raise an error to prevent eternal redirecting. raise ImproperlyConfigured, _("Error finding Upload-Folder (MEDIA_ROOT + DIRECTORY). Maybe it does not exist?") path = request.GET.get('dir', '') if get_path(path, site=site) == None: subdir = request.GET.get('subdir', '') try: if subdir == "1": path = convert_filename(path) path = u'%s' % os.path.join(site.directory, path) if not site.storage.isdir(path): site.storage.makedirs(path) return function(request, *args, **kwargs) except OSError, (errno, strerror): pass msg = _('The requested Folder does not exist.') messages.add_message(request, messages.ERROR, msg) redirect_url = reverse("filebrowser:fb_browse", current_app=site.name) + query_helper(request.GET, "", "dir") return HttpResponseRedirect(redirect_url)
def _upload_file(request): """ Upload file to the server. """ from django.core.files.move import file_move_safe if request.method == "POST": folder = request.POST.get("folder") fb_uploadurl_re = re.compile(r"^.*(%s)" % reverse("fb_upload")) folder = fb_uploadurl_re.sub("", folder) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, folder) if request.FILES: filedata = request.FILES["Filedata"] filedata.name = convert_filename(filedata.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=request.POST.get("folder"), file=filedata) # HANDLE UPLOAD uploadedfile = handle_file_upload(os.path.join(DIRECTORY, folder), filedata) # MOVE UPLOADED FILE # if file already exists if os.path.isfile(smart_str(os.path.join(MEDIA_ROOT, DIRECTORY, folder, filedata.name))): old_file = smart_str(os.path.join(abs_path, filedata.name)) new_file = smart_str( os.path.join(MEDIA_ROOT, uploadedfile) ) # uploadedfile already contains 'directory, folder' try: file_move_safe(new_file, old_file, allow_overwrite=True) except Exception, exc: # print exc raise # Create versions if necessary if PRERENDER_VERSIONS: for version in VERSIONS: version_generator(uploadedfile, version) # POST UPLOAD SIGNAL filebrowser_post_upload.send( sender=request, path=request.POST.get("folder"), file=FileObject(smart_str(os.path.join(DIRECTORY, folder, filedata.name))), )
def _process_fileupload(request, file, target_folder): """Helper that is called upon a successful fileupload with the file object, and a target folder. """ abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, target_folder) file.name = convert_filename(file.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=target_folder, file=file) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, file) # MOVE UPLOADED FILE # if file already exists if os.path.isfile(os.path.join(MEDIA_ROOT, DIRECTORY, target_folder, file.name)): old_file = os.path.join(abs_path, file.name) new_file = os.path.join(abs_path, uploadedfile) file_move_safe(new_file, old_file) # POST UPLOAD SIGNAL # TODO: Do something about the fileobject class. filebrowser_post_upload.send(sender=request, path=target_folder, file=FileObject(os.path.join(DIRECTORY, target_folder, file.name)))
def file_process(request): query = request.GET path = get_path(query.get('dir', '')) abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path) from filebrowser.forms import UploadForm form = UploadForm(data=request.POST, files=request.FILES, path=abs_path) if form.is_valid(): f = form.cleaned_data['file'] f.name = convert_filename(f.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=abs_path, file=f) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, f) # POST UPLOAD SIGNAL filebrowser_post_upload.send(sender=request, path=abs_path, file=uploadedfile) else: return form.errors
def _upload_file(request): """ Upload file to the server. """ if request.method == 'POST': folder = request.GET.get('folder') fb_uploadurl_re = re.compile(r'^.*({0})'.format(reverse("fb_upload"))) folder = fb_uploadurl_re.sub('', folder) abs_path = _check_access(request, folder) if request.FILES: filedata = request.FILES['file'] filedata.name = convert_filename(filedata.name) _check_access(request, abs_path, filedata.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=request.GET.get('folder'), file=filedata) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, filedata) # MOVE UPLOADED FILE # if file already exists if os.path.isfile( smart_str( os.path.join(fb_settings.MEDIA_ROOT, fb_settings.DIRECTORY, folder, filedata.name))): old_file = smart_str(os.path.join(abs_path, filedata.name)) new_file = smart_str(os.path.join(abs_path, uploadedfile)) file_move_safe(new_file, old_file) # POST UPLOAD SIGNAL filebrowser_post_upload.send(sender=request, path=request.GET.get('folder'), file=FileObject( smart_str( os.path.join( fb_settings.DIRECTORY, folder, filedata.name)))) return JsonResponse({'success': True})
def save(self, *args, **kwargs): # We override the standard behavior because we've overriden the FileBrowseField # with a simple ClearableFileInput if self.simple: abs_paths = {} instance = super(MediaLibraryForm, self).save(commit=False) image_file_field = instance.image_file_field file_fields = [instance.media_file_field] if image_file_field: file_fields.append(image_file_field) for f_field in file_fields: folder = media_model._meta.get_field_by_name( f_field)[0].directory abs_paths[f_field] = os.path.join( settings.MEDIA_ROOT, settings.FILEBROWSER_DIRECTORY, folder) if f_field in self.files.keys(): f = self.files[f_field] f.name = convert_filename(f.name) name = handle_file_upload(abs_paths[f_field], f) setattr(instance, f_field, name) else: # TODO(nicoechaniz): this is ugly! refactor if f_field in ["image", "still"]: if hasattr(self, "image_file_initial"): setattr(instance, f_field, self.image_file_initial) else: if hasattr(self, "media_file_initial"): setattr(instance, f_field, self.media_file_initial) instance.save() return instance else: return super(MediaLibraryForm, self).save(*args, **kwargs)
def _upload_file(request): """ Upload file to the server. """ from django.core.files.move import file_move_safe if request.method == 'POST': folder = request.POST.get('folder') fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("fb_upload")) folder = fb_uploadurl_re.sub('', folder) abs_path = _check_access(request, folder) if request.FILES: try: filedata = request.FILES['Filedata'] filedata.name = convert_filename(filedata.name) _check_access(request, abs_path, filedata.name) # PRE UPLOAD SIGNAL filebrowser_pre_upload.send(sender=request, path=request.POST.get('folder'), file=filedata) # HANDLE UPLOAD uploadedfile = handle_file_upload(abs_path, filedata) # MOVE UPLOADED FILE # if file already exists if os.path.isfile(smart_str(os.path.join(fb_settings.MEDIA_ROOT, fb_settings.DIRECTORY, folder, filedata.name))): old_file = smart_str(os.path.join(abs_path, filedata.name)) new_file = smart_str(os.path.join(abs_path, uploadedfile)) file_move_safe(new_file, old_file) # POST UPLOAD SIGNAL filebrowser_post_upload.send(sender=request, path=request.POST.get('folder'), file=FileObject(smart_str(os.path.join(fb_settings.DIRECTORY, folder, filedata.name)))) except Exception, e: try: #try to log the error with django-db-log from djangodblog.middleware import DBLogMiddleware as M M().process_exception(request, e) except: pass return HttpResponseServerError(str(e))
def _upload_file(self, request): """ Upload file to the server. """ if request.method == "POST": folder = request.GET.get('folder', '') if request.is_ajax(): # Advanced (AJAX) submission filedata = ContentFile(request.raw_post_data) else: # Basic (iframe) submission if len(request.FILES) != 1: raise Http404('Invalid request! Multiple files included.') filedata = request.FILES.values()[0] try: filedata.name = convert_filename(request.GET['qqfile']) except KeyError: return HttpResponseBadRequest( 'Invalid request! No filename given.') fb_uploadurl_re = re.compile( r'^.*(%s)' % reverse("filebrowser:fb_upload", current_app=self.name)) folder = fb_uploadurl_re.sub('', folder) path = os.path.join(self.directory, folder) file_name = os.path.join(path, filedata.name) file_already_exists = self.storage.exists(file_name) # Check for name collision with a directory if file_already_exists and self.storage.isdir(file_name): ret_json = {'success': False, 'filename': filedata.name} return HttpResponse(json.dumps(ret_json)) signals.filebrowser_pre_upload.send( sender=request, path=request.POST.get('folder'), file=filedata, site=self) uploadedfile = handle_file_upload(path, filedata, site=self) if file_already_exists and OVERWRITE_EXISTING: old_file = smart_unicode(file_name) new_file = smart_unicode(uploadedfile) self.storage.move(new_file, old_file, allow_overwrite=True) else: file_name = smart_unicode(uploadedfile) fobj = FileObject(smart_unicode(file_name), site=self) signals.filebrowser_post_upload.send( sender=request, path=request.POST.get('folder'), file=fobj, site=self) if fobj.filetype == "Image": version_path = get_version_path(fobj.path, ADMIN_THUMBNAIL, site=self) if not self.storage.isfile(version_path): version_path = version_generator(fobj.path, ADMIN_THUMBNAIL, site=self) thumbnail_path = self.storage.url(version_path) else: thumbnail_path = '' # let Ajax Upload know whether we saved it or not ret_json = { 'success': True, 'filename': filedata.name, 'path': fobj.path, 'url': fobj.url, 'thumbnail': thumbnail_path, 'filetype': fobj.filetype } return HttpResponse(json.dumps(ret_json))