Frasco: borrando subidas después de haber sido descargadas

Actualmente estoy trabajando en una pequeña interfaz web que permite a diferentes usuarios cargar archivos, convertir los archivos que han cargado y descargar los archivos convertidos. Los detalles de la conversión no son importantes para mi pregunta.

Actualmente estoy usando flask-uploads para administrar los archivos cargados, y los estoy almacenando en el sistema de archivos. Una vez que un usuario carga y convierte un archivo, hay todo tipo de botones bonitos para eliminar el archivo, de modo que la carpeta de cargas no se llene.

No creo que esto sea ideal. Lo que realmente quiero es que los archivos se eliminen justo después de descargarlos. Me conformaría con los archivos que se eliminarán cuando finalice la sesión.

He pasado algún tiempo tratando de averiguar cómo hacer esto, pero todavía tengo que tener éxito. No parece ser un problema poco común, así que creo que debe haber alguna solución que me esté perdiendo. ¿Alguien tiene una solución?

Flask tiene un decorador after_this_request que podría funcionar para este caso de uso:

 @app.route('/files//download') def download_file(filename): file_path = derive_filepath_from_filename(filename) file_handle = open(file_path, 'r') @after_this_request def remove_file(response): try: os.remove(file_path) file_handle.close() except Exception as error: app.logger.error("Error removing or closing downloaded file handle", error) return response return send_file(file_handle) 

El problema es que esto solo funcionará bien en Linux (lo que permite leer el archivo incluso después de eliminarlo si todavía hay un puntero de archivo abierto).