3
votes

Gestion (lecture) des fichiers encodés en Base64 dans une application logique et publication sur le point de terminaison

J'ai une application logique qui récupère le contenu d'un SharePoint (.xlsx) et publie le corps sur un point de terminaison pour qu'il soit traité. maintenant, le contenu que je vois est un fichier encodé en base64, ce que je voulais faire était de publier ces données telles quelles.

Lorsque j'essaie de les publier en utilisant Postman, elles sont acceptées avec succès, mais lorsqu'elles sont publiées depuis l'application Logic, je obtenir

BadRequest. Échec de la requête HTTP: le contenu n'était pas un JSON valide.

mais je peux voir que le corps censé être envoyé est du type, qui est un Json valide

decodeBase64(triggerBody()?[body('getFile')])

a également essayé cette expression

{
  "$content-type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  "$content": "AA....VeryLong...B1241BACDFA=="
}

mais j'obtiens une erreur différente

InvalidTemplate. Impossible de traiter les expressions de langage de modèle dans l'action Entrées 'HTTP' à la ligne '1' et à la colonne '2565': 'L'expression de langage de modèle' decodeBase64 (triggerBody ()? [Body ('getFile')]) 'ne peut pas être évaluée car la propriété '{ "$ content-type": "application / vnd.openxmlformats-officedocument.spreadsheetml.sheet", "$ content": "UEsDBBQABgAIAAAAIQDuooLHjAEAAJkGAAATAAgCW0Nvb ...

Ce que je veux réaliser est simple, vraiment je veux publier à mon point final le Json tel quel ou le contenu de la chaîne base64Encoded.


0 commentaires

3 Réponses :


1
votes

Si vous décodez le contenu avec base64, vous constaterez que le contenu est déformé. En effet, le contenu est au format ooxml puis encodé en base64. Et dans l'application logique, vous ne pouviez pas décoder le fichier ooxml.

Première solution, vous pouvez utiliser Azure Function pour écrire une méthode de lecture du document, puis renvoyer le contenu. Ensuite, dans l'application logique, appelez la fonction pour obtenir le contenu.

Deuxième solution, changez votre fichier en un fichier directement lisible (comme un fichier .txt), de cette façon j'ai essayé et vous pourriez l'analyser Json.

 entrez la description de l'image ici


0 commentaires

1
votes

Pouvez-vous m'envoyer votre demande de facteur, enregistrez-la en collecte puis exportez-la en fichier. Je pense que ce que vous pouvez faire dans Postman peut également être fait dans l'application logique. Ou envoyez-moi votre code, je peux le modifier.Assurez-vous que vous avez le message comme corps et qu'il correspond au paramètre de publication au niveau de l'API Web.

 var Webrequestdata = {
     "webserviceurl":  "http://examplecom/u/b/b/e.ee.msg",
   "username":  "123"
};



 $.ajax({
                   cache: false,
                   type: "POST",
                   url: 'http://example.com/res/api/Outlookapi',
                   data: JSON.stringify(Webrequestdata),
                   contentType: "application/json",
                   success: function (result) {
                       console.log("email sent  successfully");
                   },
                   error: function (response) { alert('Error: ' + response.responseText); }
               });


0 commentaires

1
votes

après avoir lu votre déclaration:

Logic App récupère le contenu d'un SharePoint (.xlsx) et publie le body à un point de terminaison à traiter. maintenant le contenu que je vois est un fichier encodé en base64

Je suppose que votre point de terminaison recherche toujours un type de contenu -
vnd.openxmlformats-officedocument.spreadsheetml.sheet
mais vous passez une chaîne Base64

1) vérifiez si votre en-tête "content-type" est correctement placé changez-le en application / json si possible
2) Assurez-vous que vous traitez correctement la chaîne base64.

Dans mon cas, j'ai extrait la chaîne base64 d'un fichier image en utilisant Javascript. J'ai des clés spéciales au début de la chaîne base64 comme '' data: image / png; base64 ', ' ACTUAL BASE 64 STRING ... ' donc j'ai supprimé le spécial clés avant la chaîne base64 réelle avec une expression régulière. Cet exemple de requête Json peut vous aider à joindre le contenu base64

Assurez-vous de convertir votre requête en JSON à l'aide de JSON.stringify[

var xhr = new XMLHttpRequest();
        xhr.withCredentials = true;
        xhr.addEventListener("readystatechange", function () {
          if (this.readyState === 4) {
            console.log(this.responseText);
            var obj = JSON.parse(this.responseText);
            try 
            {
              //do something
            }catch(err) 
            {
            //do something
            }
          }

        });
        try {
        xhr.open("POST", "https://vision.googleapis.com/v1/images:annotate?key=blablabla");
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.setRequestHeader("cache-control", "no-cache");
        xhr.setRequestHeader("Postman-Token", "111111111");

        xhr.send(data);
        }
        catch(err) {
            //do something
        }

Voici le XMLHttpRequest que j'ai utilisé:

          //var finalString = srcData.replace('data:image/png;base64,','');  
          var finalString = srcData.replace(/^,+?(\,)/, ''); 
          finalString = srcData.substring(srcData.indexOf(',')+1, srcData.length);
          var data = JSON.stringify({
            "requests": [
                {
                  "image": {
                    "content": finalString
                  },
                  "features": 
                  [
                    {
                      "type": "DOCUMENT_TEXT_DETECTION",
                      "maxResults": 1
                    }
                  ]
              }
            ]
          });


0 commentaires