Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Fileupload per API

    ChurchTools Schnittstellen
    2
    5
    123
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Q
      qualiscumque last edited by qualiscumque

      Hi zusammen,

      ich würde gerne automatisiert Dateien ins Wiki hochladen, allerdings scheitere ich immer mit dem gleichen Fehler.
      Die Idee wäre, die File Api zu verwenden, die z.B. hier: https://mghh.church.tools/api#/ so beschrieben ist:

      /files/{domainType}/{domainIdentifier}

      Für unser Wiki habe ich folgende Variablen identifiziert: (Sichtbar bei hochgeledenen Dateien ins Wiki):
      domain_id: 02bf9a18-4307-71ad-2daf-6ce4dc93dc86
      domain_type: wiki_0

      Hier mein Snippet in Python (bereits eingeloggt):

      url = "https://churchtools.xxxxxxxxxxx/api/files/wiki_0/02bf9a18-4307-71ad-2daf-6ce4dc93dc86"
      payload = {
          "Content-Disposition": "form-data",
          "name": "files[]",
          "filename": "asd.pdf",
          "Content-Type": "application/pdf",
          "paramType": "body",
          "dataType": "file",
      }
      headers = {
          'Accept': 'application/json, text/plain, */*',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                        'AppleWebKit/537.36 (KHTML, like Gecko) '
                        'Chrome/79.0.3945.130 Safari/537.36',
          'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryURL0qGTYl02r8AZB'
      }
      files = {
          'filename': open('asd.pdf', 'rb')
      }
      response = s.post(url, headers=headers, data=payload, files=files)
      

      Die Antwort darauf:

      {
      "args": [],
      "errors": [
      {
      "args": {
      "name": "files",
      "value": null
      },
      "fieldId": "files",
      "message": "Nur eine Datei darf f\u00fcr diesen Domain Typ hochgeladen werden.",
      "messageKey": "validation.domainfiles"
      }
      ],
      "message": "There are validation errors",
      "messageKey": "validation.error",
      "translatedMessage": "Die eingegebenen Daten waren nicht korrekt."
      }

      Mit der Fehlermeldung kann ich leider nichts anfangen. Könnt ihr mir da weiterhelfen?
      Das gleiche habe ich parallel mit einem generierten SwaggerClient probiert. Damit bekomme ich allerdings die gleiche Meldung.
      Ausserdem bekomme ich die gleiche Fehlermeldung mit dem "TryItOut"-Feature in der Api-Dokumentation unserer CT-Instanz.

      Viele Grüße,
      Ralf

      1 Reply Last reply Reply Quote 0
      • davidschilling
        davidschilling ChurchToolsMitarbeiter last edited by

        Die Fehlermeldung sagt ja, dass du nur eine Datei gleichzeitig hochladen darfst. Hast du vielleicht mehrere versucht hochzuladen?

        Q 1 Reply Last reply Reply Quote 0
        • Q
          qualiscumque @davidschilling last edited by

          @davidschilling: Hallo David, danke für deine schnelle Antwort. Mich hat das auf die Idee gebracht, etwas an den Headers zu schrauben. Leider konnte ich das Problem noch nicht lösen. Gibt es eine Referenzimplementierung für diese API? Der "Tester" funktioniert ja auch nicht (wie oben beschrieben).

          Hier mein aktueller Stand:

          files = {
              "Content-Disposition": "form-data",
              "filename": "asdf.pdf",
              "Content-Type": "application/pdf",
              'files': open('asdf.pdf', 'rb')
          }
          
          response = s.post(url, files=files)
          

          Ich versende also gar kein Header mehr.

          Die Antwort ist:

          {
              "args": [],
              "errors": [
                  {
                      "args": {
                          "name": "files",
                          "value": {
                              "file": "/tmp/phpZUnnbg"
                          }
                      },
                      "fieldId": "files",
                      "message": "Nur eine Datei darf f\u00fcr diesen Domain Typ hochgeladen werden.",
                      "messageKey": "validation.domainfiles"
                  }
              ],
              "message": "There are validation errors",
              "messageKey": "validation.error",
              "translatedMessage": "Die eingegebenen Daten waren nicht korrekt."
          }
          

          Ich finde es interessant, dass er schon eine Temp-Datei anlegt und das dann trotzdem verwirft.. Hast du eine Idee, wie erkannt wird, dass angeblich mehr als eine Datei hochgeladen werden soll?

          Q 1 Reply Last reply Reply Quote 0
          • Q
            qualiscumque @qualiscumque last edited by

            @qualiscumque sagte in Fileupload per API:

            Domain Typ hochgeladen

            Kann es doch am Domain Typ liegen?

            Q 1 Reply Last reply Reply Quote 0
            • Q
              qualiscumque @qualiscumque last edited by qualiscumque

              @davidschilling
              ah, habe es selbst lösen können:

              files = {
                  "Content-Disposition": "form-data",
                  "filename": "asdf.pdf",
                  "Content-Type": "application/pdf",
                  'files[]': open('asdf.pdf', 'rb')
              }
              
              response = s.post(url, files=files)
              

              Das Feld in dem die Datei übergeben wird muss"files[]", nicht "files" heissen.

              Danke trotzdem fürs mitdenken!

              1 Reply Last reply Reply Quote 1
              • First post
                Last post