Hi Fletcher
You can do this via CC using a lib like 'jszip'
to create a base64
version of a zip file and then using the base64
data to create an Attachment
in the JourneyApps DB. The attachment field will have to be defined as a media="any"
field. Like so
<field name="zip_file" label="Zip File" type="attachment" media="any" />
Here is an example showing how you can create such a file from CloudCode.
const JSZip = require('jszip');
export async function run() {
// Your code here
let photoObjects = await DB.photoObj.where("photo != ?", null).toArray();
let zip = new JSZip();
// add the images to the zip
for (let i = 0; i < photoObjects.length; i++) {
let photoObject = photoObjects[i];
let photo = photoObject.photo
// Check if photo has been synched to server
if (photo.present()) {
let imgData = await photo.toBase64()
let filename = `Photo_${i+1}.png`
zip.file(filename, imgData, { base64: true });
} else {
// skip this photo or break? your choice
}
}
// create base64 representation of the zip
let zip64 = await zip.generateAsync({ type: "base64" })
// save the zip to the DB on some object
let object = DB.someObj.create();
let newAttachment = await Attachment.create({ filename: 'zipfile.zip', base64: zip64 });
object.zip = newAttachment;
await object.save();
}
I hope this helps.
Please note, you can do a similar thing directly in the app by using HTML Bridge / JourneyApps iFrame to “host” the JSzip lib and then simply passing the zip64
data back to the view from where you can similarly create the Attachment
and save it to the DB.