1

I am using multer in a Lambda function to upload an image through an API POST request I am building, this is part of a form on my website.

This is the console log from cloud watch:

{
  fieldname: 'logo_image',
  originalname: '8824.png',
  encoding: '7bit',
  mimetype: 'image/png',
  destination: '/tmp/upload',
  filename: 'f7f44f5c39304937d10e90ceb7e9ddbb',
  path: '/tmp/upload/f7f44f5c39304937d10e90ceb7e9ddbb',
  size: 1376654
}

This is my js express function that accepts the image using multer:

routes.post('/', upload.single('logo_image'), async (req, res) => {
  const file = req.file
  // here I am just going into another function to check the form data is valid
  await checkTicketId(req, res)
});

I then upload the data to my S3 bucket:

const result = await uploadFile(req.file)

function uploadFile(file, policy_id) {
  const fileStream = fs.createReadStream(file.path)
  const uploadParams = {
    Bucket: bucketName,
    Body: fileStream,
    Key: file.filename,
  }
  return s3.putObject(uploadParams).promise()
}

The data is uploaded fine, however its just some binary nonsense. And If I return the object I get data like this:

IHDR  �      �2�p   IDATx���i�$I�%��Ǣj�WVVf]���9zw�X�h"\D  �  ��7�@ -�h���S�]gfU��n�����EDE��##"�ȡݠ���ws3UQ��� �?P ��_@�  P`3�5l'�.��w�[�!     J�0���?��@� ���1h`�8A�H@�$�@D C1�@�d`��� �ְ5 A21��rʫ ���ɀ� F̈ ���
��
k��p8 $��/4Ly3�A���e"IH�</�ߞ�
�C�R&���<��j�����b �eY�N���nY�K����x�0��Y(�Dx L(d�$� p�pE��5��Q������ٟ�u�K��ΰ  $@��N������� ��0���?~���?����?�ዏ>^���tw��\��+�����_۴IҊ@�1�����_~��������s�=%�>��W��D�z
'4c�@̺�[��_M�@D^b{)}�'�b�W���p}su3��ӡ�����xw\�u� ����
onts=s9�B ��89֠@�Cw�K�~Z�Ӳ���XݗEp��"P�uٓ�]롅�����飛'7W���<�zz}uSJ)tDz���/�;.��O�_����8�*y�����vsu����j����Cy<MWW��j.�Ja������������w����Ջ�/��}~{w��
�a��t�2�M4PB�W_|�X!x���ږs1��
���l6�P��NZ�8=Dz����,���mXl�*��`���'_���_(�o�����?�����v�
��a#���?�������C$  �� ��^!�.D=�/Σ�~O���+u�rz�%���.���f��K���x�}ɚ�4Ѭ� �����8m�&7�@�jf�_|���Y�[=pq�v9�5����0a���h�<�;��:)#��B�_��.���H`@��� �8�b�bF�P("K���Z�^8F(i0�f�X������bC �0����M�����}��|CQo��կ�A�ר?��/�VZk�s��b
��n�A�jr0�Z�&�n�wL�i��E`�����<�A���p!�� ��E�yp�*�����dD( ���  M����k�֧�EC�T�V�����Ԋ+�l�<�H�Y1�!�ʤIe��r���
ɱ���L3$��O� �-�z`�Kv���O7nK�.����9CE���Ŧ����|����g�<��W�����V���
�rw���1���D��*�J

Ideally I want it stored as .webp, I have also tried using upload instead of putObject and changing file extension. There doesn't seem to be any buffer data I can use either on the req.file property.

Any insight into this would be helpful, I've been stuck on it for a while now and I've enabled binary data through the API on AWS as well. Thanks!

John Rotenstein
  • 241,921
  • 22
  • 380
  • 470
  • I would recommend you to follow this post: https://stackoverflow.com/questions/40494050/uploading-image-to-amazon-s3-using-multer-s3-nodejs – Piyush Jain Jan 22 '22 at 06:29
  • Thanks for your reply. This isn't my issue as I am able to upload data, just what ever I upload is corrupt or cant be used. Even if I upload a .png file directly to the S3 bucket, if I download it from S3 from AWS directly its fine. If I request it via API the return is again all messed up. – harry pinehill Jan 22 '22 at 11:23

0 Answers0