[SDK Android] Synchroniser des pièces jointes

Home Forums Convertigo Products [SDK Android] Synchroniser des pièces jointes

This topic contains 5 replies, has 2 voices, and was last updated by  Gregory Vorbe 4 months ago.

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #255590

    Richard
    Participant

    Bonjour,

    J’aimerais pouvoir synchroniser un ensemble de pièces jointes (généralement des fichiers .jpg mais pas exclusivement) lorsque que je synchronise un document d’une base de données fullsync.
    J’ai trouvé quelques mentions de fs://<database>.put_attachment et fs://<database>.get_attachment sans vraiment trouver d’informations et explication sur leur fonctionnement.

    Est-il possible d’avoir quelques informations sur la manière de proposer cette synchronisation de pièces jointes ?
    Il y as t-il une méthode pour supprimer une pièce jointe ?

    Nous utilisons actuellement le SDK Android 2.1.10 et un serveur 7.5.3

    Cordialement,
    Barruet Richard

    #255591

    Gregory Vorbe
    Moderator

    Bonjour Richard,

    Les attachment se synchronisent en même temps que les documents de la base fullsync.

    La documentation sur les attachment a été mise à jour :

    Pour le put_attachment :
    https://github.com/convertigo/c8osdk-android#fsput_attachment-puts-add-an-attachment-to-a-document-in-the-database

    Pour le get_attachment :
    https://github.com/convertigo/c8osdk-android#fsget-allow-us-to-get-a-document-and-his-attachments-from-the-database

    Pour le delete attachment :
    https://github.com/convertigo/c8osdk-android#fsdelete_attachment-delete-an-attachment-from-a-document-into-the-database

    Merci.

    QA&Support

    #255619

    Richard
    Participant

    Merci pour les documentations, mais je rencontre un problème lorsque je tente d’envoyer une pièce jointe en utilisant un code très proche de ce qui est fourni dans la documentation :

    L’appel fullSync semble s’effectuer correctement (je n’entre pas dans la condition fail), mais le Push qui s’effectue après tombe en erreur silencieuse (selon le fichier que je tente d’envoyer), avec la trace suivante :
    [...] W/RemoteRequest: com.couchbase.lite.replicator.RemoteMultipartRequest {PUT, http://[...]/uniqueid9?new_edits=false}: Got error status: 500 for http://[...]/uniqueid9?new_edits=false. Reason: Internal Server Error

    Sur les traces du serveur Convertigo, je trouve la trace suivante qui semble correspondre :

    564	CouchDbManager	2018-12-21 11:07:09,671	http-bio-18080-exec-66	
    (CouchDbManager) Unable to handle BulkDocs event
    org.codehaus.jettison.json.JSONException: JSONObject["id"] not found.
        at org.codehaus.jettison.json.JSONObject.get(JSONObject.java:387)
        at org.codehaus.jettison.json.JSONObject.getString(JSONObject.java:514)
        at com.twinsoft.convertigo.engine.providers.couchdb.CouchDbManager.handleBulkDocsResponse(CouchDbManager.java:369)
        at com.twinsoft.convertigo.engine.servlets.FullSyncServlet.service(FullSyncServlet.java:498)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.twinsoft.convertigo.engine.servlets.SecurityFilter.doFilter(SecurityFilter.java:129)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.twinsoft.convertigo.engine.servlets.CompressionFilter.doFilter(CompressionFilter.java:84)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
    clientip=[...] 
    contextid=4FDE4930DD27807889941D49301AA63E 
    user='1234567A'

    J’ai essayé plusieurs cas de tests, en copiant directement dans mon code différents exemples convertis en base64 via un outil externe:

    • Le cas présenté dans la documentation avec le texte “Salut !” encodé en base64 “U2FsdXQgIQo=” avec le content_type “text/plain” : fonctionne
    • Un texte plus court “test 1″ avec le content_type “text/plain” : fonctionne
    • Une image simpliste : la pièce jointe decoded_20181221093317.png encodée en encoded_20181221085452.txt, avec le content type “image/png” : fonctionne
    • Une image plus lourde : la pièce jointe decoded_20181221093415.png encodée en encoded_20181221090639.txt, avec le content type “image/png” : ne fonctionne pas
    • Une image similaire à decoded_20181221093415.png, avec les content type image/png, application/octet-stream et text/plain : ne fonctionne pas
    • Une image réelle capturée avec l’appareil photo et gérée par notre application, avec les content type text/plain, image/jpg, application/octet-stream, converti en String base64 avec la fonction Base64.encodeFromFile: ne fonctionne pas
    • Une image réelle capturée avec l’appareil photo et gérée par notre application, avec les content type image/jpg, application/octet-stream, sous firme de FileInputStream : ne fonctionne pas

    Pouvez vous nous donner quelques informations supplémentaires pour éviter l’erreur que nous rencontrons ?
    L’exemple de la documentation concerne l’envoi d’un texte court. Quelle est la structure préconisée pour envoyer des fichiers plus lourds ?(ça semble fonctionner pour notre image simpliste mais pas pour les contenus plus complexes…)
    Bien que l’outil externe que j’utilise soit capable de re-décoder les contenus qu’il as encodé, il reste la possibilité que nous nous y prenions mal… Quelles configuration conseillez vous pour l’encodage ? (binaire ou texte, charset, type de séparateur de ligne, manière de l’insérer dans le code…).
    Pour gérer les fichiers plus complexes, est t-il conseillé de passer par un String base64 ou par un InputStream ?
    Il y as t-il une configuration à faire sur le serveur pour pouvoir gérer les attachements trop gros ?

    Attachments:
    You must be logged in to view attached files.
    #255624

    Gregory Vorbe
    Moderator

    Bonjour Richard,

    Pouvez-vous me confirmer votre environnement svp ?
    _ Android SDK ? version ?
    _ Version Convertigo Server ?
    _ Version CouchDB

    Merci.

    QA&Support

    #255625

    Richard
    Participant

    Bonjour,

    Nous utilisons le SDK Android 2.1.10, un serveur Convertigo 7.5.3 et un CouchDb 2.2.0

    Cordialement.

    #255626

    Gregory Vorbe
    Moderator

    Pour le support des attachments en couchDB 2.2, il faut utiliser Convertigo version 7.5.4 sortie aujourd’hui.

    PS: Pour ce type de support projet, il vaut mieux passer par le support JIRA dédié.

    QA&Support

Viewing 6 posts - 1 through 6 (of 6 total)

You must be logged in to reply to this topic.