cs / app.py
13ze's picture
Update app.py
47f0102 verified
raw
history blame
2.63 kB
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!")