es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Flask send_file() funciona con archivos PDF, pero no con archivos HTML.

Estoy teniendo problemas con una aplicación flask + azure. Tengo algunos archivos guardados en el almacenamiento (pdfs y htmls) y necesito devolver estos archivos cuando invoque el endpoint get_file_safe. Este método toma un parámetro file_id y accede a la base de datos, va al blob azure, crea un archivo temporal y devuelve ese archivo. Cuando paso códigos que se refieren a archivos PDF, funciona perfectamente y el archivo se muestra en la pantalla. Cuando el código coincide con un archivo HTML, la respuesta está en blanco. ¿Alguien tiene alguna idea de qué podría ser? ¡Muchas gracias! (Nota: cuando usé GCP funcionó, pero tuve que migrar, así que puse aquí que es azure).

from flask import Flask, flash, jsonify, session, redirect, url_for, escape, request, render_template, session, send_file
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient, __version__, ContentSettings

def get_file_safe():
    #login and security stuff (...) Logic goes here ->>>
    file_id = request.args.get('file_id')
    cursor.execute(
        """SELECT link, mimetype from TABLE where id = %s """, (file_id))
    rows = cursor.fetchall()
    link = rows[0][0]
    mimetype = rows[0][1]
    filename = link.split("/")[-1]
    print("Nombre de archivo: {}".format(filename))
    print("Tipo de contenido: {}".format(mimetype))

    # Versión de Google Cloud, comentada
    #client = storage.Client()
    #bucket = client.get_bucket('BUCKET_NAME')
    #blob = bucket.blob(link)
    #with tempfile.NamedTemporaryFile() as temp:
    #    blob.download_to_filename(temp.name)
    #    return send_file(temp.name, attachment_filename=filename)

    # Versión de Azure
    bucket_name = 'BUCKET-NAME'
    blob_service_client = BlobServiceClient.from_connection_string(connect_str)
    blob_client = blob_service_client.get_blob_client(container=bucket_name, blob=link)
    with tempfile.NamedTemporaryFile() as temp:
        temp.write(blob_client.download_blob().readall())
        #return send_file(temp.name, attachment_filename=filename, mimetype=mimetype)
        return send_file(temp.name, download_name=filename)  
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece ser que el problema podría estar relacionado con el tipo mime que se devuelve para el archivo HTML. Verifique si el tipo mime para el archivo HTML se está obteniendo correctamente de la base de datos y se está pasando al método send_file. También podría ser que el archivo HTML no se esté descargando correctamente desde Azure. Verifique si el enlace al archivo HTML es correcto y si el archivo se está descargando correctamente.

Comments are closed.