Reputation: 2299
I am trying to create zip from a sharepoint folder which has multiple files. I am able to get the content of each file into an array ( as per diagram below) . But I am having challenges to pull the content from the array and create one zip file for all the files ("Create file" step).
Have anyone done something similar to this before?
regards, Alan
Upvotes: 0
Views: 1267
Reputation: 8252
I could able to achieve your requirement using a 3rd party connector called Encodian
which has an action called Add to Archive (ZIP)
. Below is the flow that worked for me.
Firstly, I tried to retrieve the properties and the contents of each and every file from the folder that I'm trying to zip. Then I stored its details in below format into an array which will be passed through Add to Archive (ZIP)
action and finally saved the results by Create file
action of SharePoint connector.
{
"fileContent": @{base64(body('Get_file_content'))},
"fileName": @{body('Get_file_properties')?['{FilenameWithExtension}']}
}
Here is the structure of my files in SharePoint
Before Compression
After Compression
you can reproduce the same in your logic app using below code view
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Add_to_Archive_(ZIP)": {
"inputs": {
"body": {
"FinalOperation": true,
"documents": "@variables('Files')",
"encoding": "UTF8",
"encryption": "ZipCrypto",
"outputFilename": "ZipFolder.zip"
},
"host": {
"connection": {
"name": "@parameters('$connections')['encodiandocumentmanager']['connectionId']"
}
},
"method": "post",
"path": "/api/v1/Core/AddToZip"
},
"runAfter": {
"For_each": [
"Succeeded"
]
},
"type": "ApiConnection"
},
"Create_file": {
"inputs": {
"body": "@base64ToBinary(body('Add_to_Archive_(ZIP)')?['FileContent'])",
"host": {
"connection": {
"name": "@parameters('$connections')['sharepointonline']['connectionId']"
}
},
"method": "post",
"path": "/datasets/@{encodeURIComponent(encodeURIComponent('h<YOUR-SITE-URL>'))}/files",
"queries": {
"folderPath": "/Shared Documents",
"name": "@body('Add_to_Archive_(ZIP)')?['Filename']",
"queryParametersSingleEncoded": true
}
},
"runAfter": {
"Add_to_Archive_(ZIP)": [
"Succeeded"
]
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
},
"type": "ApiConnection"
},
"For_each": {
"actions": {
"Condition": {
"actions": {
"Append_to_array_variable": {
"inputs": {
"name": "Files",
"value": {
"fileContent": "@base64(body('Get_file_content'))",
"fileName": "@body('Get_file_properties')?['{FilenameWithExtension}']"
}
},
"runAfter": {
"Get_file_content": [
"Succeeded"
]
},
"type": "AppendToArrayVariable"
},
"Get_file_content": {
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['sharepointonline']['connectionId']"
}
},
"method": "get",
"path": "/datasets/@{encodeURIComponent(encodeURIComponent('<YOUR-SITE-URL>'))}/files/@{encodeURIComponent(body('Get_file_properties')?['{Identifier}'])}/content"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": {
"and": [
{
"equals": [
"@body('Get_file_properties')?['{IsFolder}']",
false
]
}
]
},
"runAfter": {
"Get_file_properties": [
"Succeeded"
]
},
"type": "If"
},
"Get_file_properties": {
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['sharepointonline']['connectionId']"
}
},
"method": "get",
"path": "/datasets/@{encodeURIComponent(encodeURIComponent('<YOUR-SITE-URL>'))}/tables/@{encodeURIComponent(encodeURIComponent('<->'))}/items/@{encodeURIComponent(items('For_each')?['ID'])}/getfileitem",
"queries": {
"view": "c5febd41-6227-4240-b023-0be5688aab0d"
}
},
"runAfter": {},
"type": "ApiConnection"
}
},
"foreach": "@body('Get_files_(properties_only)')?['value']",
"runAfter": {
"Get_files_(properties_only)": [
"Succeeded"
]
},
"type": "Foreach"
},
"Get_files_(properties_only)": {
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['sharepointonline']['connectionId']"
}
},
"method": "get",
"path": "/datasets/@{encodeURIComponent(encodeURIComponent('<YOUR-SITE-URL>'))}/tables/@{encodeURIComponent(encodeURIComponent('<->'))}/getfileitems"
},
"runAfter": {
"Initialize_variable": [
"Succeeded"
]
},
"type": "ApiConnection"
},
"Initialize_variable": {
"inputs": {
"variables": [
{
"name": "Files",
"type": "array"
}
]
},
"runAfter": {},
"type": "InitializeVariable"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {
"$connections": {
"defaultValue": {},
"type": "Object"
}
},
"triggers": {
"manual": {
"inputs": {
"schema": {}
},
"kind": "Http",
"type": "Request"
}
}
},
"parameters": {
"$connections": {
"value": {
"encodiandocumentmanager": {
"connectionId": "/subscriptions/<SUB - ID>/resourceGroups/<RG>/providers/Microsoft.Web/connections/encodiandocumentmanager",
"connectionName": "encodiandocumentmanager",
"id": "/subscriptions/<SUB - ID>/providers/Microsoft.Web/locations/centralus/managedApis/encodiandocumentmanager"
},
"sharepointonline": {
"connectionId": "/subscriptions/<SUB - ID>/resourceGroups/<RG>/providers/Microsoft.Web/connections/sharepointonline",
"connectionName": "sharepointonline",
"id": "/subscriptions/<SUB - ID>/providers/Microsoft.Web/locations/centralus/managedApis/sharepointonline"
}
}
}
}
}
Upvotes: 1