S3 Upload result in [object Object] as file contents

Hello! I have an interesting situation where both the s3 uploader button and uploading via a query is resulting in files containing the string [object Object]. I am using the example direct from docs (Upload multiple files to Google Cloud Store or Amazon S3 | Retool Docs). One interesting item: if I set my upload data to

{{fileDropzone.value[i].base64Data}} // this works!

instead of:

{{fileDropzone.value[i]}} // does not work

It seems to work. So I can get the batch uploader to work by fixing the query as shown, but I don't think I can apply the same trick to the s3 upload button.

I've seen others in the past (Uploading files fails with the new components - #26 by perelin) report similar issues, but the issue was closed as if it had been fixed.

many thanks,
T

Hi T1m0thy - welcome to the forums!

Could you share a screenshot of the issue? The fileDropzone.value[i] is definitely an object:
image
So if you are passing it to something that expects a string that might cause an issue. Since passing the .base64Data value (a string) from the object works, I think whatever you were passing it to needed a string.

I don't use S3 specifically, but I know I had to mess around a bit to select and format the components of the object that I needed to get my uploads to Azure Blob Storage working correctly. If we see how your S3 upload is setup and what it looks like it expects, we might be able to suggest which parts of the object go where...

Yup, I see the same thing you do for that value.

The bigger issue is that the built in s3uploader component does not appear to be working. But what I am noticing is that neither that component or the documented way to upload to S3 by hand are working at the moment. I can workaround the by-hand version, but the built-in way does not work. I suspect something changed in underlying S3 code that has not propagated to the front-end, but I am pretty new to retool, so that's just a guess.

Hey @T1m0thy! Thanks for bringing this up, and @jg80 thanks for the assist! I can see the same results with fileDropzone.value[i] vs fileDropzone.value[i].base64Data. This documentation was made before we put all the file object information in the value array, as some of the information was stored in component.files previously and the value was only the base64Data. I'll have the docs team update!

On the S3 uploader component itself, I'm not having that issue. But it's likely due to file types. This component is ultimately much less configurable (as you noted), which is one of the reasons that it is being deprecated. We do recommend using any of the file input components and an S3 resource to upload files.

Let me know if you have any other questions!