def _upload(request): """ Handles file uploads. The uploaded file is stored in HDFS. We just need to rename it to the right path. """ if request.method == "POST": form = UploadForm(request.POST, request.FILES) if not form.is_valid(): logger.error("Error in upload form: %s" % (form.errors,)) else: uploaded_file = request.FILES["hdfs_file"] dest = form.cleaned_data["dest"] if request.fs.isdir(dest): assert posixpath.sep not in uploaded_file.name dest = request.fs.join(dest, uploaded_file.name) # Temp file is created by superuser. Chown the file. tmp_file = uploaded_file.get_temp_path() username = request.user.username try: try: request.fs.setuser(request.fs.superuser) request.fs.chmod(tmp_file, 0644) request.fs.chown(tmp_file, username, username) except IOError, ex: msg = _('Failed to chown uploaded file ("%(file)s") as superuser %(superuser)s') % { "file": tmp_file, "superuser": request.fs.superuser, } logger.exception(msg) raise PopupException(msg, detail=str(ex)) finally: request.fs.setuser(username) # Move the file to where it belongs try: request.fs.rename(uploaded_file.get_temp_path(), dest) except IOError, ex: raise PopupException( _('Failed to rename uploaded temporary file ("%(file)s") to "%(name)s": %(error)s') % {"file": tmp_file, "name": dest, "error": ex} ) dest_stats = request.fs.stats(dest) return render( "upload_done.mako", request, { # status is used by "fancy uploader" "status": 1, "path": dest, "result": _massage_stats(request, dest_stats), "next": request.GET.get("next"), }, )
def _upload(request): """ Handles file uploads. The uploaded file is stored in HDFS. We just need to rename it to the right path. """ if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if not form.is_valid(): logger.error("Error in upload form: %s" % (form.errors, )) else: uploaded_file = request.FILES['hdfs_file'] dest = form.cleaned_data["dest"] if request.fs.isdir(dest): assert posixpath.sep not in uploaded_file.name dest = request.fs.join(dest, uploaded_file.name) # Temp file is created by superuser. Chown the file. tmp_file = uploaded_file.get_temp_path() username = request.user.username try: try: request.fs.setuser(request.fs.superuser) request.fs.chmod(tmp_file, 0644) request.fs.chown(tmp_file, username, username) except IOError, ex: msg = 'Failed to chown uploaded file ("%s") as superuser %s' % \ (tmp_file, request.fs.superuser) logger.exception(msg) raise PopupException(msg, detail=str(ex)) finally: request.fs.setuser(username) # Move the file to where it belongs try: request.fs.rename(uploaded_file.get_temp_path(), dest) except IOError, ex: raise PopupException( 'Failed to rename uploaded temporary file ("%s") to "%s": %s' % (tmp_file, dest, ex)) dest_stats = request.fs.stats(dest) return render_with_toolbars( 'upload_done.mako', request, { # status is used by "fancy uploader" 'status': 1, 'path': dest, 'result': _massage_stats(request, dest_stats), 'next': request.GET.get("next") })
def _upload(request): """ Handles file uploads. The uploaded file is stored in HDFS. We just need to rename it to the right path. """ if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if not form.is_valid(): logger.error("Error in upload form: %s" % (form.errors,)) else: uploaded_file = request.FILES['hdfs_file'] dest = form.cleaned_data["dest"] if request.fs.isdir(dest): assert posixpath.sep not in uploaded_file.name dest = request.fs.join(dest, uploaded_file.name) # Temp file is created by superuser. Chown the file. tmp_file = uploaded_file.get_temp_path() username = request.user.username try: try: request.fs.setuser(request.fs.superuser) request.fs.chmod(tmp_file, 0644) request.fs.chown(tmp_file, username, username) except IOError, ex: msg = 'Failed to chown uploaded file ("%s") as superuser %s' % \ (tmp_file, request.fs.superuser) logger.exception(msg) raise PopupException(msg, detail=str(ex)) finally: request.fs.setuser(username) # Move the file to where it belongs try: request.fs.rename(uploaded_file.get_temp_path(), dest) except IOError, ex: raise PopupException( 'Failed to rename uploaded temporary file ("%s") to "%s": %s' % (tmp_file, dest, ex)) dest_stats = request.fs.stats(dest) return render_with_toolbars('upload_done.mako', request, { # status is used by "fancy uploader" 'status': 1, 'path': dest, 'result': _massage_stats(request, dest_stats), 'next': request.GET.get("next") })
def upload(request): """ Handles file uploads. Django has a hook for "upload handlers" that could make this more efficient. Currently Django will store files greater than 2.5MB in a temp directory. We could implement an upload handler to send data right through to the destination. http://docs.djangoproject.com/en/1.0/topics/http/file-uploads/#upload-handlers """ if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if form.is_valid(): # Bit of a wart that form.file doesn't give you the file, # and you have to do form.files.get("file"). file = form.files.get("file") dest = form.cleaned_data["dest"] if request.fs.isdir(dest): assert posixpath.sep not in file.name dest = posixpath.join(dest, file.name) output = request.fs.open(dest, "w") try: for chunk in file.chunks(): output.write(chunk) finally: output.close() dest_stats = request.fs.stats(dest) return render_with_toolbars('upload_done.mako', request, { # status is used by "fancy uploader" 'status': 1, 'path': dest, 'result': _massage_stats(request, dest_stats), 'next': request.GET.get("next") }) else: dest = request.GET.get("dest") initial_values = {} if dest: initial_values["dest"] = dest form = UploadForm(initial=initial_values) return render_with_toolbars('upload.mako', request, {'form': form, 'next': request.REQUEST.get("dest")})
def _upload(request): """ Handles file uploaded by HDFSfileUploadHandler. The uploaded file is stored in HDFS. We just need to rename it to the destination path. """ form = UploadForm(request.POST, request.FILES) if form.is_valid(): uploaded_file = request.FILES['hdfs_file'] dest = form.cleaned_data['dest'] if request.fs.isdir(dest) and posixpath.sep in uploaded_file.name: raise PopupException(_('Sorry, no "%(sep)s" in the filename %(name)s.' % {'sep': posixpath.sep, 'name': uploaded_file.name})) dest = request.fs.join(dest, uploaded_file.name) tmp_file = uploaded_file.get_temp_path() username = request.user.username try: # Temp file is created by superuser. Chown the file. request.fs.do_as_superuser(request.fs.chmod, tmp_file, 0644) request.fs.do_as_superuser(request.fs.chown, tmp_file, username, username) # Move the file to where it belongs request.fs.rename(uploaded_file.get_temp_path(), dest) except IOError, ex: already_exists = False try: already_exists = request.fs.exists(dest) except Exception: pass if already_exists: msg = _('Destination %(name)s already exists.' % {'name': dest}) else: msg = _('Copy to "%(name)s failed: %(error)s') % {'name': dest, 'error': ex} raise PopupException(msg) return { 'status': 0, 'path': dest, 'result': _massage_stats(request, request.fs.stats(dest)), 'next': request.GET.get("next") }
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
return render_with_toolbars( 'upload_done.mako', request, { # status is used by "fancy uploader" 'status': 1, 'path': dest, 'result': _massage_stats(request, dest_stats), 'next': request.GET.get("next") }) else: dest = request.GET.get("dest") initial_values = {} if dest: initial_values["dest"] = dest form = UploadForm(initial=initial_values) return render_with_toolbars('upload.mako', request, { 'form': form, 'next': request.REQUEST.get("dest") }) def status(request): status = request.fs.status() data = { # Beware: "messages" is special in the context browser. 'msgs': status.get_messages(), 'health': status.get_health(), 'datanode_report': status.get_datanode_report(), 'name': request.fs.name }