kikovalle / PLGSharepointRestAPI-java

Easy to use wrapper for the Sharepoint Rest API v1. Even if this is not a full implementation it covers most common use cases and provides examples to extending this API.
MIT License
39 stars 31 forks source link

'folder' parameter to 'uploadFile' method #41

Open JLLMNCHR opened 2 years ago

JLLMNCHR commented 2 years ago

Kiko,

Suponiendo un dominio XYZ.sharepoint.com, un 'site' ABCDE, con mi usuario panchovilla@hhhh.com contraseña **, he sido capaz de subir manualmente (desde web) un documento a la ruta 'Documentos/General/INFO-Backup'. Tal como muestra la siguiente imagen:

image

Sin embargo, no he sido capaz de subir un documento programáticamente. Recibiendo un 403 forbidden.

result = wrapper.uploadFile("/sites/ABCDE/Documentos/General/INFO-Backup/", resource, metadata); //403 Forbidden

¿Sabes si es que estoy pasando mal el parámetro 'folder', o si debo llevar a cabo alguna acción de configuración/permisos desde la web?

De los logs extraje:

_POST request for "https://XYZ.sharepoint.com/sites/ABCDE/_api/web/GetFolderByServerRelativeUrl('/sites/ABCDE/Documentos/General/INFO-Backup/')/Files/add(url='TEST.txt',overwrite=true)" resulted in 403 (Forbidden); invoking error handler_

Gracias de antemano!

kikovalle commented 2 years ago

Hola Primero disculpas porque no me ha dado tiempo a responder a la anterior pregunta, tengo pendiente revisar los nombres de parámetro crear una documentación más clara. Esto puede implicar un cambio en la firma de alguno de los métodos.

El error 403 es un error de permisos (prohibido, es decir, el servicio reconoce al usuario pero éste no tiene permisos para realizar la operación solicitada).

Supon que tenemos la instancia xxx.sharepoint.com de sharepoint online, el usuario @.***, el pass es abcd1234 para ese usuario y el sitio al que pertenece la librería a la que subir un documento se llama panxoliñas, siendo la librería LibreriaEnSitio. Con esos datos el ejemplo sería

PLGSharepointClient client = new ***@***.***",

"abcd1234", xxxsharepoint.com", "/sites/panxoliñas"); JSONObject result = client.uploadFile("LibreriaEnSitio", (Resource) new FileSystemResource(new File("/rutaaarchivoenlocal.ext")), new JSONObject());

Si el archivo es muy grande, se puede utilizar el método uploadBigFile, donde el úitimo parámetro seria el chunk size a utilizar (tamaño de bloques), por ejemplo 1024*1024. El tema de los parámetros tengo pendiente, como te comento, darle una pequeña vuelta para mejorarlo, tanto en nomenclatura como en la documentación, unificando la nomenclatura y simplificando el uso.

Saludos, disculpa por la demora en la respuesta pero tengo unos días con bastante lío en el trabajo

El lun, 7 feb 2022 a las 9:03, JLLMNCHR @.***>) escribió:

Kiko,

Suponiendo un dominio XYZ.sharepoint.com http://XYZ.sharepoint.com, un 'site' ABCDE, con mi usuario @. @.>* contraseña **, he sido capaz de subir manualmente (desde web) un documento a la ruta ' Documentos/General/INFO-Backup'. Tal como muestra la siguiente imagen:

[image: image] https://user-images.githubusercontent.com/53475407/152748337-8af8390f-cd17-4bad-a8d5-7b2b6026089e.png

Sin embargo, no he sido capaz de subir un documento programáticamente. Recibiendo un 403 forbidden.

result = wrapper.uploadFile("/sites/ABCDE/Documentos/General/INFO-Backup/", resource, metadata); //403 Forbidden

¿Sabes si es que estoy pasando mal el parámetro 'folder', o si debo llevar a cabo alguna acción de configuración/permisos desde la web?

Gracias de antemano!

— Reply to this email directly, view it on GitHub https://github.com/kikovalle/PLGSharepointRestAPI-java/issues/41, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEXV7KGKSZVR3VTKV242DSDUZ54GFANCNFSM5NWWC3NQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you are subscribed to this thread.Message ID: @.***>

JLLMNCHR commented 2 years ago

Gracias, sigo probando. Es fichero pequeño. La clave por mi parte, creo que es interpretar lo que tu llamas "LibreriaEnSitio", para confirmar si es "/sites/ABCDE/Documentos/General/INFO-Backup/". Y confirmar el tema de los permisos, sobre ese "LibreriaEnSitio". Saludos

kikovalle commented 2 years ago

En el caso de querer subirlo a esa carpeta JSONObject result = client.uploadFile("Documentos/General/INFO-Backup", (Resource) new FileSystemResource(new File("/rutaaarchivoenlocal.ext")), new JSONObject());

Si el usuario con el que se realiza la autenticación tiene permisos de creación y la carpeta existe (si no existe habria que utilizar el método createFolder para crear la estructura, de forma similar a como se hace en un FS local)

El lun, 7 feb 2022 a las 12:26, JLLMNCHR @.***>) escribió:

Gracias, sigo probando. Es fichero pequeño. La clave por mi parte, creo que es interpretar lo que tu llamas " LibreriaEnSitio", para confirmar si es " /sites/ABCDE/Documentos/General/INFO-Backup/". Y confirmar el tema de los permisos, sobre ese "LibreriaEnSitio". Saludos

— Reply to this email directly, view it on GitHub https://github.com/kikovalle/PLGSharepointRestAPI-java/issues/41#issuecomment-1031360584, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEXV7KCL26HLQC7TMRMC6T3UZ6T5BANCNFSM5NWWC3NQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you commented.Message ID: @.***>

JLLMNCHR commented 2 years ago

Con "Documentos/General/INFO-Backup" sigue dando 403 Forbidden; pese a que la carpeta existe y con ese mismo usuario si puedo subir documentos arrastrando desde la web. (No sé, quizás halla que habilitar alguna configuración desde Sharepoint). Gracias!

kikovalle commented 2 years ago

Ese error 403 es de permisos del usuario en la librería. Esto puede ser porque esté rota la herencia de permisos en la carpeta, que el usuario no tenga permisos de escritura, o algo similar, Puedes realizar la prueba contra la carepta Documentos (que seria en este caso la librería sharepoint), si esto va bien el siguiente paso que yo daría sería probar en el primer nivel de la subcarpeta, si va bien en el segundo, hasta detectar donde se dejan de tener permisos. ¿El proceso se está conectando con el mismo usuario con el que has accedido desde la web?

El lun, 7 feb 2022 a las 12:43, JLLMNCHR @.***>) escribió:

Con "Documentos/General/INFO-Backup" sigue dando 403 Forbidden; pese a que la carpeta existe y con ese mismo usuario si puedo subir documentos arrastrando desde la web. (No sé, quizás halla que habilitar alguna configuración desde Sharepoint). Gracias!

— Reply to this email directly, view it on GitHub https://github.com/kikovalle/PLGSharepointRestAPI-java/issues/41#issuecomment-1031375500, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEXV7KFF6IKISLTBYJ3Y2JTUZ6V6JANCNFSM5NWWC3NQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you commented.Message ID: @.***>

JLLMNCHR commented 2 years ago

Si uso uploadFile("Documentos", ... me sigue dando 403. Mientras que desde Web si que puedo subir un fichero:

image

El usuario es el mismo en ambos casos

kikovalle commented 2 years ago

Y estas utilizando el mismo usuario para conectarte desde la web que el usuario cno el que se realiza el login desde código?

El lun, 7 feb 2022 a las 12:55, JLLMNCHR @.***>) escribió:

Si uso uploadFile("Documentos", ... me sigue dando 403. Mientras que desde Web si que puedo subir un fichero:

[image: image] https://user-images.githubusercontent.com/53475407/152783521-5f5c3f95-512b-4d7e-b4ed-26b6ee2a89ec.png

— Reply to this email directly, view it on GitHub https://github.com/kikovalle/PLGSharepointRestAPI-java/issues/41#issuecomment-1031384962, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEXV7KEUXADEWSJAEMJQKKLUZ6XJPANCNFSM5NWWC3NQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you commented.Message ID: @.***>

JLLMNCHR commented 2 years ago

Si si, el usuario es el mismo en ambos casos

kikovalle commented 2 years ago

Podrías enviarme por privado a mi correo @.*** el código que utlizas? sin poder verlo no tengo forma de saber donde puede estar el problema y lanzando tests contra una instancia de sharepoint online no reproduzco el problema (no necesito credenciales ni nada asi ya que es para probar contra una instancia de sharepoint online sober la que no tengo el problema)

El lun, 7 feb 2022 a las 13:01, JLLMNCHR @.***>) escribió:

Si si, el usuario es el mismo en ambos casos

— Reply to this email directly, view it on GitHub https://github.com/kikovalle/PLGSharepointRestAPI-java/issues/41#issuecomment-1031390216, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEXV7KAXJMHHYNCKSZO7SSLUZ6YCRANCNFSM5NWWC3NQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you commented.Message ID: @.***>

JLLMNCHR commented 2 years ago

Atención! acabo de conseguir subir un documento, TEST.txt, pero a una nueva 'Biblioteca de documentos', que he llamado 'Lomin'. Con el siguiente código:

result = wrapper.uploadFile("Lomin", (Resource) new FileSystemResource(new File("C:/logs/TEST.txt")), new JSONObject());

image

JLLMNCHR commented 2 years ago

Voy a pedir a la gente de Sharepoint si pueden volver a crear esa 'Biblioteca de documentos' llamada 'Documentos', a ver si es que, cuando la crearon la dieron permisos 'raros'.

kikovalle commented 2 years ago

Eso indica que el problema es algo de permisos (igual que Documentos lo haya creado un cliente de OneDrive y que desde la web se tenga información sobre ésto y se utilicen las APIs de OneDrive y no de Sharepoint. Si es posible una prueba sería la de eliminar y volver a crear esta librería.

Si la necesitas en OneDrive puedes sincronizarla desde sharepoint en tu OneDrive después.

El lun, 7 feb 2022 a las 13:16, JLLMNCHR @.***>) escribió:

Atención! acabo de conseguir subir un documento, TEST.txt, pero a una nueva 'Biblioteca de documentos', que he llamado 'Lomin'. Con el siguiente código:

result = wrapper.uploadFile("Lomin", (Resource) new FileSystemResource(new File("C:/logs/TEST.txt")), new JSONObject());

[image: image] https://user-images.githubusercontent.com/53475407/152786391-19a36b75-3d78-473d-92c8-834be11f4653.png

— Reply to this email directly, view it on GitHub https://github.com/kikovalle/PLGSharepointRestAPI-java/issues/41#issuecomment-1031403865, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEXV7KHOX2AYBDJHATYJAF3UZ6ZZXANCNFSM5NWWC3NQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you commented.Message ID: @.***>

JLLMNCHR commented 2 years ago

Gracias Kiko!!, vamos a ir haciendo pruebas, a ver si acotamos qué es necesario para que uploadFile no devuelva el 403