def post(self, instance_id): if not self.is_exist(instance_id): abort(404) if not self.is_allowed(instance_id): abort(403) uploaded_file = request.files["file"] file_name_parts = uploaded_file.filename.split(".") extension = ".%s" % file_name_parts.pop().lower() original_file_name = ".".join(file_name_parts) if extension in ALLOWED_PICTURE_EXTENSION: self.save_picture_preview(instance_id, uploaded_file) preview_file = files_service.update_preview_file( instance_id, { "extension": "png", "original_name": original_file_name }, ) self.emit_app_preview_event(instance_id) return preview_file, 201 elif extension in ALLOWED_MOVIE_EXTENSION: try: self.save_movie_preview(instance_id, uploaded_file) except Exception as e: current_app.logger.error(e, exc_info=1) current_app.logger.error("Normalization failed.") deletion_service.remove_preview_file_by_id(instance_id) abort(400, "Normalization failed.") preview_file = files_service.update_preview_file( instance_id, { "extension": "mp4", "original_name": original_file_name }, ) self.emit_app_preview_event(instance_id) return preview_file, 201 elif extension in ALLOWED_FILE_EXTENSION: self.save_file_preview(instance_id, uploaded_file, extension) preview_file = files_service.update_preview_file( instance_id, { "extension": extension[1:], "original_name": original_file_name, }, ) self.emit_app_preview_event(instance_id) return preview_file, 201 else: current_app.logger.info("Wrong file format, extension: %s", extension) deletion_service.remove_preview_file_by_id(instance_id) abort(400, "Wrong file format, extension: %s" % extension)
def post(self, instance_id): if not self.is_exist(instance_id): abort(404) if not self.is_allowed(instance_id): abort(403) uploaded_file = request.files["file"] extension = "." + uploaded_file.filename.split(".")[-1].lower() if extension in ALLOWED_PICTURE_EXTENSION: self.save_picture_preview(instance_id, uploaded_file) preview_file = files_service.update_preview_file( instance_id, {"extension": "png"}) self.emit_app_preview_event(instance_id) return preview_file, 201 elif extension in ALLOWED_MOVIE_EXTENSION: self.save_movie_preview(instance_id, uploaded_file) preview_file = files_service.update_preview_file( instance_id, {"extension": "mp4"}) self.emit_app_preview_event(instance_id) return preview_file, 201 elif extension in ALLOWED_FILE_EXTENSION: self.save_file_preview(instance_id, uploaded_file, extension) preview_file = files_service.update_preview_file( instance_id, {"extension": extension[1:]}) self.emit_app_preview_event(instance_id) return preview_file, 201 else: current_app.logger.info("Wrong file format, extension: %s", extension) abort(400, "Wrong file format, extension: %s" % extension)
def patch_file_storage(): """ Patch to run after upgrade from 0.7.6 or lower to 0.8.0 or superior. It concerns only files stored on the hard drive. """ from zou import app from zou.app import config from zou.app.stores import file_store from zou.app.services import files_service with app.app.app_context(): if hasattr( config, "THUMBNAIL_FOLDER", ): preview_folder = config.THUMBNAIL_FOLDER else: preview_folder = config.PREVIEW_FOLDER print("Looking for existing file in %s" % preview_folder) originals_folder = os.path.join(preview_folder, "preview-files", "originals") if os.path.exists(originals_folder): for folder in os.listdir(originals_folder): subfolder = os.path.join(".", originals_folder, folder) print("Looking into folder: %s" % subfolder) for filename in os.listdir(subfolder): file_path = os.path.join(subfolder, filename) print("Loading file: %s" % file_path) instance_id = filename.split(".")[0] extension = filename.split(".")[1] if extension == "png": file_store.add_picture("originals", instance_id, file_path) elif extension == "mp4": file_store.add_movie("previews", instance_id, file_path) else: file_store.add_file("previews", instance_id, file_path) print("Original file stored: (%s, %s)" % (instance_id, extension)) try: files_service.update_preview_file( instance_id, {"exstension": extension}) except: print("Warning: preview file entry " "not found: %s." % instance_id) for prefix in ["thumbnails", "thumbnails-square", "previews"]: folder = os.path.join(preview_folder, "preview-files", prefix) if os.path.exists(folder): for subfoldername in os.listdir(folder): subfolder = os.path.join(".", folder, subfoldername) for filename in os.listdir(subfolder): file_path = os.path.join(subfolder, filename) instance_id = filename.split(".")[0] file_store.add_picture(prefix, instance_id, file_path) print("%s file stored: %s" % (prefix, instance_id)) for prefix in ["persons", "projects"]: folder = os.path.join(preview_folder, prefix) if os.path.exists(folder): for filename in os.listdir(folder): file_path = os.path.join(folder, filename) instance_id = filename.split(".")[0] file_store.add_picture("thumbnails", instance_id, file_path) print("%s file stored: %s" % (prefix, instance_id))
def post(self, instance_id): if not self.is_exist(instance_id): abort(404) if not self.is_allowed(instance_id): abort(403) uploaded_file = request.files["file"] folder_path = thumbnail_utils.get_preview_folder_name( "originals", instance_id) extension = "." + uploaded_file.filename.split(".")[-1].lower() if extension in [".png", ".jpg"]: thumbnail_utils.save_file(folder_path, instance_id, uploaded_file, size=None) if extension == ".jpg": thumbnail_utils.convert_jpg_to_png(folder_path, instance_id) thumbnail_utils.generate_preview_variants(instance_id) self.emit_app_preview_event(instance_id) files_service.update_preview_file(instance_id, {"extension": "png"}) return thumbnail_utils.get_preview_url_path(instance_id), 201 elif extension in [".mp4", ".mov"]: from moviepy.editor import VideoFileClip file_name = "%s%s" % (instance_id, extension) folder = thumbnail_utils.create_folder(folder_path) file_path = os.path.join(folder, file_name) picture_path = os.path.join(folder, "%s.png" % instance_id) uploaded_file.save(file_path + '.tmp') clip = VideoFileClip(file_path + '.tmp') clip = clip.resize(height=720) clip.save_frame(picture_path, round(clip.duration / 2)) thumbnail_utils.generate_preview_variants(instance_id) file_name = "%s%s" % (instance_id, extension) clip.write_videofile(os.path.join(folder, instance_id + ".mp4")) files_service.update_preview_file(instance_id, {"extension": "mp4"}) self.emit_app_preview_event(instance_id) return {}, 201 elif extension in [".obj", ".pdf", ".ma", ".mb"]: from moviepy.editor import VideoFileClip file_name = "%s%s" % (instance_id, extension) folder = thumbnail_utils.create_folder(folder_path) file_path = os.path.join(folder, file_name) uploaded_file.save(file_path) files_service.update_preview_file(instance_id, {"extension": extension[1:]}) return {}, 201 else: current_app.logger.info("Wrong file format, extension: %s", extension) abort(400, "Wrong file format, extension: %s" % extension)