处理(读取)逻辑应用程序中的 Base64 编码文件,并发布到端点
Posted
技术标签:
【中文标题】处理(读取)逻辑应用程序中的 Base64 编码文件,并发布到端点【英文标题】:Handling (read) of Base64 encoded files in a Logic App, and post to endpoint 【发布时间】:2019-07-27 04:50:51 【问题描述】:我有一个逻辑应用程序,它从 SharePoint (.xlsx) 获取内容并将正文发布到端点以进行处理。现在我看到的内容是一个base64编码的文件,我想做的是按原样发布这些数据。
当我尝试使用邮递员发布它时,它被成功接受,但是当它从我得到的逻辑应用程序发布时
错误请求。 Http 请求失败:内容不是有效的 JSON。
但我可以看到要发送的正文是类型,这是一个有效的 Json
"$content-type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"$content": "AA....VeryLong...B1241BACDFA=="
也试过这个表达方式
decodeBase64(triggerBody()?[body('getFile')])
但我得到一个不同的错误
无效的模板。无法在“1”行和“2565”列的操作“HTTP”输入中处理模板语言表达式:“模板语言表达式 'decodeBase64(triggerBody()?[body('getFile')])' 无法评估,因为属性' "$content-type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "$content": "UEsDBBQABgAIAAAAIQDuooLHjAEAAJkGAAATAAgCW0Nvb...
我想要实现的很简单,我真的想将 Json 原样或 base64Encoded 字符串的内容发布到我的终点。
【问题讨论】:
【参考方案1】:看了你的陈述后:
逻辑应用从 SharePoint (.xlsx) 获取内容并发布 正文到端点以进行处理。现在我看到的内容是 base64 编码文件
我假设您的端点仍在寻找内容类型 -vnd.openxmlformats-officedocument.spreadsheetml.sheet 但您传递的是 Base64 字符串
1) 检查您的“content-type”标头是否放置正确,如果可能,将其更改为 application/json 2) 确保正确处理 base64 字符串。
在我的例子中,我使用 javascript 从图像文件中提取了 base64 字符串。我在 base64 字符串的开头有特殊键,例如 ''data:image/png;base64','ACTUAL BASE 64 STRING...' 所以我删除了特殊的带有一些正则表达式的实际 base64 字符串之前的键。 此示例 Json 请求可能有助于附加 base64 内容
确保您使用 JSON.stringify
将您的请求转换为 JSON //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
]
]
);
这是我使用的 XMLHttpRequest:
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
【讨论】:
【参考方案2】:您能否将您的邮递员请求发送给我,将其保存在收集中,然后导出为文件。 我认为您在邮递员中可以做的事情也可以在逻辑应用程序中完成。 或者把你的代码发给我,我可以修改它。确保你有post作为body,它与web api级别的post参数匹配。
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);
);
【讨论】:
【参考方案3】:如果你用base64解码内容你会发现内容是乱码。这是因为内容是 ooxml 格式,然后使用 base64 编码。而在逻辑应用程序中,您无法解码 ooxml。
第一个解决方案,您可以使用 Azure Function 编写一个读取文档然后返回内容的方法。然后在逻辑应用中调用函数来获取内容。
第二种方案,把你的文件改成直接可读的文件(比如.txt文件),这种方式我试过了,你可以解析Json。
【讨论】:
以上是关于处理(读取)逻辑应用程序中的 Base64 编码文件,并发布到端点的主要内容,如果未能解决你的问题,请参考以下文章