Activity Feed
- Posted Re: UDOIT 2.6.0 "Eatonville" on Accessibility. 10-22-2021 08:58 AM
- Posted Re: UDOIT 2.6.0 "Eatonville" on Accessibility. 10-22-2021 08:55 AM
- Posted ¿Cómo subir un archivo a Canvas desde el API utilizando Python? on Canvas Admin Articles. 05-07-2021 09:55 AM
My Posts
Post Details | Date Published | Views | Kudos |
---|---|---|---|
¿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 ... |
05-07-2021 |
342 |
0 |
05-07-2021
09:55 AM
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
... View more