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表示并在没有额外参数的情况下发送。(请参阅将数据上传到服务器。)类似的东西可能会在晚上保持开发状态...