def get_files(request, path, search_tag, search_text): root_path = get_upload_library() buser, bmanager = get_user_access_to_path(request.user, path) fullpath = u"%s/%s" % (root_path, urllib.unquote(path)) fileList = {} files_id = [] search_text_files = [] dirs = [] import re for f in os.listdir(fullpath): ff = os.path.join(fullpath, f) if os.path.isdir(ff): dirs.append(f) continue pk, fname = split_file_name(f) if pk is False: continue else: files_id.append(int(pk)) statinfo = os.stat(ff) fileList[pk] = {'name': fname, 'realname': f, 'size': statinfo[stat.ST_SIZE], 'creation': datetime.fromtimestamp(statinfo[stat.ST_CTIME]), 'modification': datetime.fromtimestamp(statinfo[stat.ST_MTIME]), 'ext': os.path.splitext(f)[1][1:], 'path': path, } if search_text and re.search(search_text, fname, re.IGNORECASE): search_text_files.append(pk) filterreq = None if search_tag: filterreq = Q(tags__icontains=search_tag) if search_text: if filterreq: filterreq = filterreq & Q(description__icontains=search_text) else: filterreq = Q(description__icontains=search_text) | Q( tags__icontains=search_text) if search_text_files: if filterreq: filterreq = filterreq | Q(pk__in=search_text_files) else: filterreq = Q(pk__in=search_text_files) files = ZornaFile.objects.filter(pk__in=files_id) if filterreq: files = files.filter(filterreq) for f in files: f.file_name = fileList[str(f.pk)]['name'] f.file_info = fileList[str(f.pk)] import operator files = list(files) files.sort(key=operator.attrgetter('file_name')) return files, dirs
def fm_delete_file(request): pathfile = request.POST.get('dir', None) ret = {} if pathfile: path = clean_path(pathfile) if path != pathfile: ret['message'] = gettext(u"Incorrect path") ret['status'] = 'error' else: buser, bmanager = get_user_access_to_path(request.user, path) if bmanager is False: ret['message'] = gettext(u"Access denied") ret['status'] = 'error' else: try: fname = os.path.basename(pathfile) pk, filename = split_file_name(fname) os.remove(get_upload_library() + '/' + path) ZornaFile.objects.get(pk=int(pk)).delete() ret['message'] = gettext(u"File deleted successfully") ret['status'] = 'success' except: ret['message'] = gettext(u"Invalid file name") ret['status'] = 'error' else: ret['message'] = gettext(u"Invalid file path") ret['status'] = 'error' json_data = simplejson.dumps(ret) return HttpResponse(json_data)
def add_files(root_folder, user, path): ret = [] for f in os.listdir(path): p = os.path.join(path, f) if os.path.isdir(p): ret.extend(add_files(root_folder, user, p)) continue pk, fname = split_file_name(f) if pk is False: try: file = ZornaFile( description='', owner=user, modifier=user, folder=root_folder) file.save() dest = os.path.join(path, u"%s,%s" % (file.pk, f)) os.rename(p, dest) ret.append(p) except: continue return ret
def get_file(request): pathfile = request.GET.get('file', None) if pathfile: path = clean_path(pathfile) if path != pathfile: return HttpResponseForbidden() buser, bmanager = get_user_access_to_path(request.user, path) if buser is False: return HttpResponseForbidden() f = os.path.basename(path) path = "%s/%s" % (get_upload_library(), path) fp = open(path, 'rb') content_type = mimetypes.guess_type(f)[0] response = HttpResponse(fp.read(), content_type=content_type) response['Content-Length'] = os.path.getsize(path) pk, filename = split_file_name(f) response['Content-Disposition'] = "attachment; filename=%s" % filename return response else: return HttpResponseForbidden()
def get_file(request): pathfile = request.GET.get('file', None) inline = request.GET.get('inline', None) if pathfile: path = clean_path(pathfile) if path != pathfile: return HttpResponseForbidden() buser, bmanager = get_user_access_to_path(request.user, path) if buser is False: return HttpResponseForbidden() f = os.path.basename(path) path = "%s/%s" % (get_upload_library(), path) fp = open(path, 'rb') content_type = mimetypes.guess_type(f)[0] response = HttpResponse(fp.read(), content_type=content_type) response['Content-Length'] = os.path.getsize(path) pk, filename = split_file_name(f) disposition = 'inline' if inline else 'attachment' response['Content-Disposition'] = "%s; filename=%s" % (disposition, filename) return response else: return HttpResponseForbidden()