在node.js中处理uiimagejpegresentation或uiimagepngresentation时遇到问题



TL;DR:如何将 UIImageRepresentation数据写入node.js服务器中的实际文件格式?(或Swift以外的任何地方)

所以我在这里处于困境...

我想通过Alamofire将UIimageJpeGresentation(或任何形式的数据编码图像)发送到节点服务器,以保存在那里。我用Busboy处理MultipartFormData ...

  busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
  var datamail = './storage/' + fieldname;
  var stream = fs.createWriteStream(datamail)
  console.log('Field [' + fieldname + ']: value: ' + util.inspect(val));
  console.log('Storing letter in ' + datamail);
  stream.write(val);
});

并通过写入流保存。我最初想阅读我放置的UIImage,但是我不确定服务器如何响应这样的对象,所以我去了UIImageJPEGRepresentation.,它读取了UIImageJPEGRepresentation对象...

Field [test.png]: value:
'�PNGrnu001anu0000u0000u0000rIHDRu0000u0000u0000du0000u0000u0000dbu0002u0000u0000u0000��u0002u0003u0000u0000u0000u0001sRGBu0000��u001c�u0000u0000u0000u001ciDOTu0000u0000u0000u0002u0000u0000u0000u0000u0000u0000u00002u0000u0000u0000(u0000u0000u00002u0000u0000u00002u0000u0000(ajrp�u0000u0000(-IDATxu0001��u0007Tu0014��LJ�u0005X�u0002�,u�w�+����KԈ-�u0016[Ԩ�$1&j�I�b�u0002��*Mz�lﻔ��مr���s��yΜ��u0011�����u000e"���%S��`r�Iu0014j�Ie�OL,W��d�OM��I��%R�H�u0019_��u001bl�M�]�U U�t�d2�T��u0017H�k|��u0013㉤�te`]u0002)X��O�!�f�v�XoȿDnn�a���?�`��u0013R��u001f��u000e �_u0007`�=:u0010B�JozRz����t�u001f��u0013X:^�CXu000f.<9�c�r§C��¢�$R�W?��:u001a�L�u0016K��u0001u0013H���u000f����`�u0013e���K'���u001a,+X�eu0005�YYu000fu0016��A�`=u0000�u000f4zF�,t8t��r�u0005;�b�JUz^��^Y�t�u001f��;�8��u0004Ku001f�`�u0003�wLX`�����2����e:4�|u0007�5�L���pu0006��ڸ��*Ē~��u0015`�b���ku0010����u000fK/���t��u0012�DD�bbـ�u0006�vu0010,�T�5����tZ����u000e�����wť����^�뿠�D���~08l-SH���$J0��u0006�a�u0006u0014���u0012��$u0012H�������u000e�`Xz}��a}�)=A��O����Anu001a�f��ХNLtu0018&�u0015C�r^:��q�Â�?u000f�/x��z^�H�u000b��[X@J�Ԁu0001)�@�u0005^#Wh����a�ݩ-�tp�O��D�u0001��&��ucWmDצK-5�u0002c'�u0002u0016�w�X.u0014�tyu0000v>Au0006�u0017����m��g��u0012�����u0002v�N6�˸u000e��=�u0016u0013��Â}xfL/Z�zX IX�Wu000e�h@J"шu0015=u0000K(�u0000,���u0000�u0000�u000eu0013���u0018��u0005|u0017�a_ʱ�CGG��/I���+,�u0013u6�u0007a�_Pu0000E�����u000elbP��c��u0002T�u0001�(u=u0000\�ˁ�u0003�ku0014�n�H)����n�u0007n� L>�u0001�U�P1���^�u001f�u0013b7�nô��`��>����t;���V�rF�d���u001der&u0005O�=�u0016u001f�u0011ɡu0010�R>&%�njb��u0000d�H�ݩu0006�u0012e�H�'Q�bEu001f_�˓�t��;E�u000e��C��!Ay2�K��@u0006��Ju0014�u0012�u0010u0016�u00142�u001f1:�rD�u0019`>>u0018u0016�v@�S�bKu0007np����R�u001b��0u0018u0016u0000�oa�Ru+u0015�J�F#��H42�L�Ķz$RT$F�¾�vuE-/3�+%��EJS⫦�IMu000f^�>~��4���K��7�W�o3��y��"EY������u000bu0015I��Ju0002?Ru0001rÄ�r^:q���u001a�/U�j�u001dXBIu0017��g�u0004u0016P�w`r�u0005�t�ғ¤$U�%�^��O�A�Ru0000��Ҧ(��H�j|��x?��Σ�;u000fx7�u�r��ʍ΋��~�����r��_;�]i��b�OW���|�z��[տݩ�������|Iu���u000b��~�u0002d...

成功地将其保存到.jpeg ...

所以我不会让我添加图片,因为我的代表不够高...单击

发现它是我无法使用的损坏的图像。我的应用程序即时从相机中提取框架,并将其转换为UIImage(JPEG/PNG)表示(请参阅GIST)。下一个最佳选择似乎是直接上传(因为它在邮递员中起作用),但是Alamofire仅支持直接的Data对象或URL编码的内容,我认为UIImageJPEGRepresentations无法直接发送。我真的只想知道如何处理这些对象。

预先感谢。

修复了比我想象的要快。我在服务器代码中放置了一个记录器,以检查MIME类型:

busboy.on('field', function(mimetype) {
  // var datamail = /*path.join('.', 'storage', fieldname);*/ './storage/' + fieldname;
  // var stream = fs.createWriteStream(datamail)
  console.log(MIMETYPE: ' + mimetype);
});

...发现text/plain。我去了alamofire并更改了参数,

由此:

Alamofire.upload(
multipartFormData: { multipartFormData in
    multipartFormData.append(compresso!, withName: "test.png")
},

Alamofire.upload(
multipartFormData: { multipartFormData in
// notice the MIME change
    multipartFormData.append(compresso!, withName: "test.png", fileName: "file.jpg", mimeType: "image/png")
},

它起作用了!它能够安全地进行处理并做事。他们应该在Alamofire示例中真正改变这一点,因为他们使用PNG表示并在没有额外参数的情况下发送。(请参阅将数据上传到服务器。)类似的东西可能会在晚上保持开发状态...

相关内容

  • 没有找到相关文章

最新更新