I have a library that generates binary image data and I would like to upload this as a PNG to an S3 bucket. What is the simplest way to do this in Meteor, as of 2023?
(I am already using slingshot for client-side uploads.)
I have a library that generates binary image data and I would like to upload this as a PNG to an S3 bucket. What is the simplest way to do this in Meteor, as of 2023?
(I am already using slingshot for client-side uploads.)
Since my functions use streams, I convert the data to stream first. For buffer data, I use Readable
Stream | Node.js v19.6.0 Documentation
And then use any package or code out there to stream data to s3 bucket.
could this work for you?!
const blobData = imageData.slice(23) // this is to remove the root data of your image "data:image/png;base64 ...
yourFileToUpload = b64toBlob(blobData, 'image/png')
// the blob...ing function
const b64ToBlob = (b64Data, contentType, sliceSize) => {
let byteNumbers, i, slice
let offset = 0
const byteCharacters = atob(b64Data)
const byteArrays = []
sliceSize = sliceSize || 512
while (offset < byteCharacters.length) {
slice = byteCharacters.slice(offset, offset + sliceSize)
byteNumbers = []
for (i = 0; i < slice.length; ++i) {
byteNumbers.push(slice.charCodeAt(i))
}
byteArrays.push(new Uint8Array(byteNumbers))
offset += sliceSize
}
return new Blob(byteArrays, { type: contentType })
}