import os import streamlit as st from streamlit_tree_select import tree_select # Configuração do diretório de armazenamento STORAGE_DIR = "storage" # Criar o diretório de armazenamento se não existir if not os.path.exists(STORAGE_DIR): os.makedirs(STORAGE_DIR) # Função para listar arquivos em formato de árvore def list_files_tree(directory): file_tree = {} for root, dirs, files in os.walk(directory): folder_path = os.path.relpath(root, directory) if folder_path not in file_tree: file_tree[folder_path] = {'folders': [], 'files': []} for d in dirs: file_tree[folder_path]['folders'].append(d) for f in files: file_tree[folder_path]['files'].append(f) return file_tree # Função para gerar árvore de arquivos def generate_file_tree(directory): tree_data = {} file_tree = list_files_tree(directory) for folder, contents in file_tree.items(): path_parts = folder.split(os.sep) current_level = tree_data for part in path_parts: if part not in current_level: current_level[part] = {} current_level = current_level[part] for f in contents['files']: current_level[f] = None return tree_data # Interface do Streamlit st.title("Gerenciamento de Armazenamento em Nuvem") # Upload de arquivo uploaded_file = st.file_uploader("Escolha um arquivo para enviar") if uploaded_file is not None: file_path = os.path.join(STORAGE_DIR, uploaded_file.name) with open(file_path, "wb") as f: f.write(uploaded_file.getbuffer()) st.success(f"Arquivo {uploaded_file.name} enviado com sucesso!") # Exibir arquivos st.header("Arquivos no Armazenamento") file_tree_data = generate_file_tree(STORAGE_DIR) selected_file = tree_select(file_tree_data) if selected_file: file_url = os.path.join(STORAGE_DIR, selected_file) if selected_file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.webp')): st.image(file_url, caption=selected_file, use_column_width=True) else: st.markdown(f"[{selected_file}]({file_url})") # Deletar arquivo st.header("Deletar Arquivo") file_to_delete = st.text_input("Digite o caminho do arquivo para deletar (ex: subpasta/nome_do_arquivo.txt)") if st.button("Deletar"): if file_to_delete: abs_path = os.path.join(STORAGE_DIR, file_to_delete) if os.path.isfile(abs_path): os.remove(abs_path) st.success(f"Arquivo {file_to_delete} deletado com sucesso!") else: st.error(f"Arquivo {file_to_delete} não encontrado!")