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.

Cargue el archivo a almacenamiento en la nube directamente desde la solicitud sin guardarlo localmente.

Estoy intentando subir un archivo a Google Cloud Storage usando la API que construí en Flask (Python), pero no quiero guardar el archivo localmente. Quiero tomar el archivo directamente de la solicitud y subirlo al almacenamiento en la nube.

Método para subir a GCS

def upload_to_bucket(blob_name, path_to_file):
    """Upload data to a bucket"""
    storage_client = storage.Client()

    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(blob_name)
    blob.upload_from_filename(path_to_file)

    #Devuelve una URL pública
    return blob.public_url

Obtener el objeto de archivo del cuerpo de la solicitud

file = request.files['file']

Así es como llamo al método:

url = upload_to_bucket(file.name, file)

Pero devuelve un error de atributo. Intenté file.value, file.file, pero eso no funcionó.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para cargar un archivo directamente desde el cuerpo de la petición a Google Cloud Storage, puede usar el método upload_from_file() del objeto Blob. Puede modificar el método upload_to_bucket() de la siguiente manera:

    from flask import request
    from google.cloud import storage
    
    def upload_to_bucket(blob_name):
        """Suba los datos a un cubo"""
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        blob = bucket.blob(blob_name)
    
        # Obtenga el objeto de archivo del cuerpo de la solicitud
        file = request.files['file']
        # Suba el archivo directamente desde el cuerpo de la solicitud
        blob.upload_from_file(file)
    
        # Devuelve una URL pública
        return blob.public_url
    

    Aquí, estamos usando request.files['file'] para obtener el objeto de archivo del cuerpo de la solicitud. Luego, pasamos este objeto de archivo directamente al método blob.upload_from_file() para cargar el archivo en GCS. Finalmente, estamos devolviendo la URL pública del archivo cargado.

    Puede llamar a este método de la siguiente manera:

    url = upload_to_bucket(file_name)
    

    Donde file_name es el nombre del archivo que desea guardar en GCS.

Comments are closed.