def upload_files(request): files_data = [] files_metadata = [] if request.method == 'POST': path2save = os.path.join(settings.MEDIA_ROOT, 'apps',request.POST['app_id']) for key in request.FILES: myfile = request.FILES[key] name = "".join([ (c if c.isalnum() or c=='.' else '') for c in myfile.name]) for c in r' []/\;,><&*:%=+@!#^()|?^': name = name.replace(c,'') fs = FileSystemStorage(location=path2save, base_url=settings.MEDIA_URL+'apps/'+request.POST['app_id']+'/') filename = fs.save(name, myfile) url = fs.url(filename) files_data.append(url) files_metadata.append({ 'date':fs.get_created_time(filename).strftime("%Y-%m-%d %H:%M:%S"), 'extension':os.path.splitext(filename)[1], 'file':url, 'name':myfile.name, 'old_name':myfile.name, 'replaced':False, 'size':fs.size(filename), 'size2':fs.size(filename), 'type':[] }) data = {'files':files_data, 'metas':files_metadata } return HttpResponse(simplejson.dumps(data,bigint_as_string=True ), "application/json")
def get_deploy_packages_name(): fs = FileSystemStorage() directories, files = fs.listdir(settings.MEDIA_ROOT) dir_creation_time = [(fs.get_created_time(directory), directory) for directory in directories] dir_creation_time.sort(key=lambda tup: tup[0], reverse=True) uploaded_package = [d[1] for d in dir_creation_time] return uploaded_package
def post(self, request, pk, access_key, filename): image = request.FILES.get('image', default=None) if image is None: return JsonResponse( { "image": "This field is required with attached content be " "image files" }, status=400) extension = os.path.splitext(image.name)[1].lower() if extension not in EXTENSION: return JsonResponse( { "image": "Image format is not supported", "supported_format": EXTENSION }, status=400) old_image_url = "{}/{}/{}".format(settings.IMAGE_ROOT, access_key.int, filename) os.remove(old_image_url) if image is None: return JsonResponse( { "image": "This field is required with attached content be " "image files" }, status=400) image_name = "{}_{}{}".format(pk, uuid.uuid4().hex, extension) image_path = "{}/{}/{}".format(settings.IMAGE_ROOT, access_key.int, image_name) pil_image_size = save_image(image, image_path, extension) fs = FileSystemStorage() return JsonResponse( { "image_id": pk, "url": request.build_absolute_uri("../{}/?api_key={}".format( pk, access_key.hex)), "image_link": request.build_absolute_uri("//{}{}/{}".format( settings.STATIC_URL, access_key.int, image_name)), "size": pil_image_size, "created_time": fs.get_created_time(image_path), }, status=200)
def getModelInfo(self): """Navigate Diagram""" session = self.client_session if not session is None: modelInfo = session.modelInfo storage = FileSystemStorage() file_path = join(settings.MEDIA_ROOT, "models", modelInfo.uri) file_size = storage.size(file_path) if file_size > 1e+6: file_size = f"{round(file_size / 1024 / 1024, 2)} MB" else: if file_size > 1e+3: file_size = f"{round(file_size / 1024, 2)} kB" else: file_size = f"{file_size} B" created_time = storage.get_created_time(file_path) modified_time = storage.get_modified_time(file_path) modelInfo.uri res = [ { "Key": "modelinfo_model_id", "Value": modelInfo.modelId }, { "Key": "modelinfo_model_name", "Value": modelInfo.name }, { "Key": "modelinfo_model_file", "Value": modelInfo.uri }, { "Key": "modelinfo_file_size", "Value": file_size }, { "Key": "modelinfo_created_date", "Value": f"{created_time.strftime('%Y-%m-%d %H:%M')} hs." }, { "Key": "modelinfo_updated_date", "Value": f"{modified_time.strftime('%Y-%m-%d %H:%M')} hs." }, ] return res else: raise exceptions.NotAcceptable("Can't find session")
def get(self, request, pk, access_key, filename): uploaded_image_url = "{}/{}/{}".format(settings.IMAGE_ROOT, access_key.int, filename) with Image.open(uploaded_image_url) as pil_image: pil_image_size = pil_image.size fs = FileSystemStorage() return JsonResponse( { "image_id": pk, "url": request.build_absolute_uri(), "image_link": request.build_absolute_uri("//{}{}/{}".format( settings.STATIC_URL, access_key.int, filename)), "size": pil_image_size, "created_time": fs.get_created_time(uploaded_image_url), }, status=200)
def explore(request, f_path=''): ''' View that returns the information of the current directory in the filesystem. :param request: request information. :param f_path: relative filepath from the URL. :return: an array of JSON objects that represent the characteristics of the files/directories in the current path. ''' f_path = f_path.split( '/') # splitting just in case the OS doesn't use unix current_folder_path = path.join(settings.MEDIA_ROOT, *f_path) # open the current folder using Django specific classes. current_folder = FileSystemStorage(location=current_folder_path, file_permissions_mode=0o644, directory_permissions_mode=0o644) # current_folder_info: [[folder1, folder2, ...], [file1, file2, ...]] current_folder_info = [[], []] try: current_folder_info = current_folder.listdir(path='.') except NotADirectoryError: raise Http404('Not a Directory') # store data of present folder folder_data = [] for f_name in current_folder_info[0]: # reading folders folder_data.append({ 'name': f_name, 'is_folder': True, 'created': current_folder.get_created_time(name=f_name), 'modified': current_folder.get_modified_time(name=f_name), 'accessed': current_folder.get_accessed_time(name=f_name), }) # update file's information for f_name in current_folder_info[1]: # reading files file_path = path.join(current_folder_path, f_name) ## Fetch tags try: obj = Dataset.objects.get(path=file_path) obj_tags = DatasetTag.objects.filter(dataset_id=obj.id) tags = [Tag.objects.get(id=el.tag_id).tag_name for el in obj_tags] except ObjectDoesNotExist: tags = [] # get file type using specific library type_file = magic_unix.from_file(filename=file_path) type_file_mime = magic_unix.from_file(filename=file_path, mime=True) folder_data.append({ 'name': f_name, 'is_folder': False, 'created': current_folder.get_created_time(name=f_name), 'modified': current_folder.get_modified_time(name=f_name), 'accessed': current_folder.get_accessed_time(name=f_name), 'size': current_folder.size(name=f_name), 'type': type_file, 'type/mime': type_file_mime, 'tags': tags }) return JsonResponse({'response': folder_data}, safe=True)