cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

¿Cómo subir un archivo a Canvas desde el API utilizando Python?

Find your school's Canvas URL

To find your school or institution's Canvas URL, begin typing the name of your school/institution. Results will appear after you type at least 3 characters. For best results be as specific as possible. If you can't find your school, try using any part of your school's name or searching for your school district or state. You may also need to search for the school using the acronym or full name, for example "USU" and "Utah State University".

¿Cómo subir un archivo a Canvas desde el API utilizando Python?

Síntomas

La documentación del APi Canvas funciona perfectamente, pero desde un terminal. ¿Qué sucede si deseas subir varios archivos? El proceso va a ser muy demorado y tardarías  varios días en subir todos los archivos. 

Diagnosis

El siguiente código le va a funcionar para subir archivos de cualquier formato, puede ser en sus archivos personales, un curso, en una tarea, o en los archivos de un estudiante(s), cabe recalcar que debe tener roll de administrador. 

Solution

Espero les sea de mucha utilidad.

import requests
import json

url = "https://<canvas>/api/v1/users/self/files?name=nombre_archivo.png&size=tamaño_de_archivo_en_bytes&parent_folder_path=nombre_de_carpeta"

payload={}
headers = {
'Authorization': '<token>',
}
# Le decimos a Canvas que vamos a subir un archivo
response = requests.request("POST", url, headers=headers, data=payload)

# Si se ejecutó el llamado emitirá un código 200
print(response.status_code)
print("")

data_json = json.loads(response.text)
 
# token para subir el archivo
upload_url = data_json['upload_url']
 
# Parámetros obtenidos
upload_params = data_json['upload_params']

# Parte importante, aquí debes actualizar los parámetros obtenidos y agregar "None" a cada parámetro,
para el elemento en upload_params:
      upload_params [elemento] = ( Ninguno , upload_params [elemento])

# Agregamos el parámetro "archivo"
upload_params [ 'file' ] = '/path/nombre_archivo.png' , open ( '/path/nombre_archivo.png' , 'rb' )

# Una vez actualizados los parámetros y agregado el "file", imprime y vas a obtener algo así
# {'filename': (None, 'prueba.png'), 'content_type': (None, 'image / png'), 'file': ('/path/nombre_archivo.png', <_io.BufferedReader name = '/path/nombre_archivo.png'>)}
imprimir (upload_params)

# Finalmente, hacemos el llamado con el nuevo token generado y con los parámetros actualizados
resp = request.post (upload_url, files = upload_params)
 
# Si se ejecutó el llamado emitirá un código 200
imprimir (resp.status_code)

# Listo !!!, puedes ir a Canvas y el archivo estará subido
Was this article helpful? Yes No
Labels
Have a question about Canvas? Ask in the Q&A forum:
Embed this guide in your Canvas course:

Note: You can only embed guides in Canvas courses. Embedding on other sites is not supported.