Обработка (чтение) файлов в кодировке Base64 в приложении логики и отправка в конечную точку
У меня есть приложение логики, которое получает содержимое от SharePoint (.xlsx) и отправляет тело в конечную точку для обработки. теперь содержимое, которое я вижу, является файлом в кодировке base64, и я хотел опубликовать эти данные как есть.
когда я пытаюсь опубликовать его с помощью почтальона, он успешно принимается, но когда он публикуется из приложения логики, я получаю
BadRequest. Http-запрос не выполнен: содержимое не является допустимым JSON.
но я вижу, что тело, которое должно было быть отправлено, имеет тип, который является действительным Json
{
"$content-type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"$content": "AA....VeryLong...B1241BACDFA=="
}
также попробовал это выражение
decodeBase64(triggerBody()?[body('getFile')])
но я получаю другую ошибку
InvalidTemplate. Невозможно обработать выражения языка шаблона в входных данных "HTTP" действия в строке "1" и столбце "2565": "Выражение языка шаблона" decodeBase64(triggerBody()?[Body('getFile')]) "не может быть оценено, поскольку свойство '{ "$content-type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "$content": "UEsDBBQABgAIAAAAIQDuooLHjAEAAJkGAAATAAgCW0Nvb...
То, чего я хочу добиться - это просто, я хочу опубликовать в своей конечной точке Json как есть или содержимое строки base64Encoded.
1 ответ
Можете ли вы отправить мне запрос почтальона, сохраните его в сборке, а затем экспортируйте как файл. Я думаю, что то, что вы можете делать в почтальоне, можно сделать и в приложении логики. Или пришлите мне свой код, я могу его изменить. Убедитесь, что у вас есть сообщение в теле и оно соответствует параметру сообщения на уровне веб-API.
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); }
});
Посмотрев на ваше заявление:
Logic App получает содержимое из SharePoint (.xlsx) и отправляет тело в конечную точку для обработки. теперь содержимое, которое я вижу, является файлом в кодировке base64
Я предполагаю, что ваша конечная точка все еще ищет тип контента -
vnd.openxmlformats-officedocument.spreadsheetml.sheet,
но вы передаете строку Base64
1) проверьте, правильно ли размещен заголовок "content-type", измените его на application/json, если возможно
2) Убедитесь, что вы правильно обрабатываете строку base64.
В моем случае я извлек строку base64 из файла изображения с помощью Javascript. У меня есть специальные ключи в начале строки base64, такие как "data:image/png;base64","ACTUAL BASE 64 STRING...", поэтому я удалил специальные ключи перед фактической строкой base64 с некоторым регулярным выражением. Этот образец запроса Json может помочь в прикреплении содержимого base64
Убедитесь, что вы конвертируете свой запрос в JSON с помощью JSON.stringify
//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
}
Если вы расшифруете контент с помощью base64, вы обнаружите, что он искажен. Это потому, что содержимое в формате ooxml затем кодируется с помощью base64. И в приложении логики вы не можете расшифровать ooxml.
Первое решение: вы можете использовать функцию Azure, чтобы написать метод для чтения документа, а затем вернуть содержимое. Затем в приложении логики вызовите функцию для получения контента.
Второе решение, измените ваш файл на файл, который можно прочитать напрямую (например, файл.txt), так я попробовал, и вы можете разобрать его, Json.