---
title: "Subida fácil de archivos a un bucket de Oracle Cloud (OCI): script de Python"
description: "Un script de Python que facilita la subida de archivos a Oracle Cloud Infrastructure Object Storage."
date: 2023-04-26
categories: ["hosting"]
tags: ["oci","python"]
---

Este script de Python está pensado para principiantes que quieren subir archivos desde su ordenador a Oracle Cloud Infrastructure Object Storage. El script usa la librería OCI para conectarse a la nube y subir archivos a un bucket. Incluye funciones para comprobar si un bucket existe, crear uno nuevo si es necesario y subir a la nube los archivos de un directorio indicado.

El script es fácil de usar y se puede ejecutar con un simple comando en una consola o terminal. Esto lo convierte en una gran herramienta para cualquiera que busque una forma sencilla y eficiente de almacenar y acceder a archivos en la nube de OCI.

## Qué hace el script

### Librerías

El programa usa algunas librerías integradas de Python para trabajar con archivos y directorios, además de una librería llamada "oci" que permite al programa comunicarse con Oracle Cloud.

### Crear un cliente de Object Storage

El programa empieza creando un objeto "cliente de Object Storage". Este objeto es como una herramienta especial que ayuda al programa a comunicarse con Oracle Cloud y a hacer cosas como almacenar archivos.

### Comprobar si el bucket existe

El programa comprueba si ya existe un "bucket" en Oracle Cloud. Un bucket es como una carpeta especial en la nube donde se pueden almacenar archivos. Si el bucket ya existe, el programa no creará uno nuevo.

### Crear un bucket

Si el bucket no existe, el programa lo crea. Es como crear una carpeta nueva en la nube para almacenar archivos. El programa también establece algunas reglas para asegurarse de que nadie pueda ver los archivos del bucket sin permiso.

### Subir archivos al bucket

A continuación, el programa busca archivos en un directorio de tu ordenador y sube cada uno al bucket en la nube. Es como meter tus juguetes en una caja y enviar la caja a la nube, para poder jugar con ellos desde cualquier parte del mundo.

### Juntarlo todo

El programa reúne todos estos pasos en una función "main", que es como una gran receta que el ordenador debe seguir. También usa algunos comandos especiales que te permiten elegir desde qué directorio de tu ordenador subir los archivos y a qué bucket de la nube enviarlos.

## Script de Python para subir el directorio al bucket de OCI Object Storage

```python
import oci
import os
import sys
import argparse




# Comprobar si el bucket existe
def create_bucket_if_not_exists(object_storage, namespace, compartment_id, bucket_name):
    try:
        object_storage.get_bucket(namespace, bucket_name)
        print(f"Bucket {bucket_name} already exists")
    except oci.exceptions.ServiceError as e:
        if e.status == 404:
            # Crear el bucket si no existe
            print(f"Creating bucket {bucket_name}")
            create_bucket_details = oci.object_storage.models.CreateBucketDetails(
                name=bucket_name,
                compartment_id=compartment_id,
                public_access_type="NoPublicAccess"
            )
            object_storage.create_bucket(namespace, create_bucket_details)
        else:
            raise

# Subir el contenido del directorio
def upload_directory_contents(bucket_name, object_storage, namespace, directory_path):
    # Crear el Upload Manager
    upload_manager = oci.object_storage.UploadManager(object_storage, max_parallel_uploads=10)
    for root, dirs, files in os.walk(directory_path):
        for file in files:
            file_path = os.path.join(root, file)
            print(f"Uploading {file_path}")
            upload_manager.upload_file(namespace, bucket_name, file, file_path)

def main():

    # Crear el cliente de Object Storage
    config = oci.config.from_file("~/.oci/config", "DEFAULT")
    object_storage = oci.object_storage.ObjectStorageClient(config)
    # Configurar los detalles del compartment y el bucket
    compartment_id = "<compartment_id>"
    parser = argparse.ArgumentParser()
    parser.add_argument('--dir', required=True)
    parser.add_argument('--bucket_name', required=True)
    args = parser.parse_args()
    bucket_name = args.bucket_name
    directory_path = args.dir

    namespace = object_storage.get_namespace().data
    create_bucket_if_not_exists(object_storage, namespace, compartment_id, bucket_name)
    upload_directory_contents(bucket_name, object_storage, namespace, directory_path)

if __name__ == "__main__":
    main()
```

En el script tienes que reemplazar **compartment_id** por tu propio compartment_id, que es donde se almacenará el bucket.

## Preparar todo para ejecutar el script

### Instalación de OCI

Python ya debería estar instalado en tu PC, así que no lo trataré aquí. Primero tenemos que instalar la herramienta oci. Para ello, abre una consola o terminal y escribe el siguiente comando:

```bash
pip install oci
```

Este comando instalará oci para que nuestro script de Python pueda usarlo.

Otra opción es instalarlo con Yum; en Linux 7 sería:

```bash
sudo yum install python36-oci-cli
```

Más información en [Working With CLI](https://docs.public.oneportal.content.oci.oraclecloud.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm)

### Crear el archivo de configuración

A continuación necesitamos un archivo secreto llamado config que indica al script cómo acceder a nuestra caja de juguetes en OCI. El archivo debería tener este aspecto:

```ini
[DEFAULT]
user=ocid1.user...
fingerprint=...
key_file=path/to/your/oci_api_key.pem
tenancy=ocid1.tenancy...
region=us-ashburn-1
```

El script buscará este archivo cuando se ejecute. Debes configurarlo con tus datos; la documentación de OCI te ayudará a hacerlo. El archivo se lee en el script en esta línea:

```python
config = oci.config.from_file("~/.oci/config", "DEFAULT")
```

### Ejecutar el script

Para ejecutar el script, abre una consola o terminal y escribe el siguiente comando:

```bash
python script.py --dir /path/to/your/folder --bucket_name your_bucket_name
```

Sustituye `/path/to/your/folder` por la ruta a la carpeta con los juguetes (archivos) que quieres almacenar, y `your_bucket_name` por el nombre que quieras darle a tu caja de juguetes (bucket).

### Qué ocurre cuando se ejecuta el script

Cuando el script se ejecuta, hace lo siguiente:

- Lee el archivo de configuración secreto.
- Comprueba si nuestro bucket existe o crea uno nuevo si es necesario.
- Toma todos los archivos de la carpeta elegida y los sube a nuestro bucket en OCI.

¡Eso es todo! Ahora ya sabes cómo funciona el script y cómo usarlo para almacenar tus archivos de forma segura en OCI.