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.
3 Réponses :
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.
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); } });
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 } ] } ] });