尝试通过http请求从ruby客户端(使用RestClient)向node.js服务器发送文件(图像)
图像文件是tempfile,它将有效负载参数读取为二进制,如下所示:
tf = open('http://via.placeholder.com/220x220')
tf.binmode
response = JSON.parse(
RestClient::Resource.new(url).post({
:payload => {
:multipart => true,
:file => tf.read,
:caption => scheduled_post.post.caption
}
})
)
tf.read调用产生:
tf.read
=> "\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xFF\xFE\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 95\n\xFF\xDB\x00C\x00\x02\x01\x01\x01\x01\x01\x02\x01\x01\x01\x02\x02\x02\x02\x02\x04\x03\x02\x02\x02\x02\x05\x04\x04\x03\x04\x06\x05\x06\x06\x06\x05\x06\x06\x06\a\t\b\x06\a\t\a\x06\x06\b\v\b\t\n\n\n\n\n\x06\b\v\f\v\n\f\t\n\n\n\xFF\xDB\x00C\x01\x02\x02\x02\x02\x02\x02\x05\x03\x03\x05\n\a\x06\a\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\xFF\xC0\x00\x11\b\x03U\x04\xFF\x03\x01\"\x00\x02\x11\x01\x03\x11\x01\xFF\xC4\x00\x1F\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\xFF\xC4\x00\xB5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\x01}\x01\x02\x03\x00\x04\x11\x05\x12!1A\x06\x13Qa\a\"q\x142\x81\x91\xA1\b#B\xB1\xC1\x15R\xD1\xF0$3br\x82\t\n\x16\x17\x18\x19\x1A%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x83\x84\x85\x86\x87\x88\x89\x8A\x92\x93\x94\x95\x96\x97\x98\x99\x9A\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFF\xC4\x00\x1F\x01\x00\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\xFF\xC4\x00\xB5\x11\x00\x02\x01\x02\x04\x04\x03\x04\a\x05\x04\x04\x00\x01\x02w\x00\x01\x02\x03\x11\x04\x05!1\x06\x12AQ\aaq\x13\"2\x81\b\x14B\x91\xA1\xB1\xC1\t#3R\xF0\x15br\xD1\n\x16$4\xE1%\xF1\x17\x18\x19\x1A&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x92\x93\x94\x95\x96\x97\x98\x99\x9A\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xE2\xE3\xE4\xE5...
在节点端从中获取缓冲区的确如此:
let buf = Buffer.from(req.body.payload.file, "binary")
file参数如下:
file: '%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%DC%00%00%00%DC%04%03%00%00%00%E9t%D2%B2%00%00%00%1BPLTE%CC%CC%CC%96%96%96%B1%B1%B1%A3%A3%A3%9C%9C%9C%AA%AA%AA%BE%BE%BE%C5%C5%C5%B7%B7%B7%8E-B%F9%00%00%00%09pHYs%00%00%0E%C4%00%00%0E%C4%01%95%2B%0E%1B%00%00%01aIDATx%9C%ED%D5%BDj%C30%14%86%E1%93%F8w%B4l%D1xt%E8%D2%D1%86BW%BB%14%B2%26w%10%2F%9D%1D%08tM%A0%17%5E%C9%21%E9b%81%B1J%A7%F7%19%0E%89%3E8F%27%B2%22%02%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%FF%EEYW%22%EB%E6%DD%7C%FC%D6%97%B9%D1R%91R%85%C8A%A9ZR%A5%CA%99%D1b%FD.%E9.%B1%1E%CE%A5%84e%AAgF%8B%1D%8E%D2%D7%D1%93%C4%85%F4%7B%FBmV%B4X%27%12%B6a%26%F21%B6%AF%CC%D2%B5%95%A0%9C%8E%BC%99%19%85%D9%AA%B5%CD%9BAN%B5Y%0Ar%E9%DB%E9%C8%DB%97%C8%A9M%06I%B4%DD%8Dm.%B1%96%E68%1D%FD%85CeJ%94%9B%99%99%E1%8D%0B%2F%85%2B%F2%17%E9%C16%DE%DD%86gWNz%E3%8A%BC%25%DD%CE%D4%B3i%FC%D8%C2Z%ED%5D%91%B7kav%90%AA7%F9%FD%81butE%BERU%D9%C6%B9%29%8F%E3%17%A8%DA%15%F9%3A%DB7%CC%DC%1Er%7B%AD%C7%29%F6%AF%A5%2B%F2%B5%ADLY%E7%E3S%EEWG%F7%A9%5D%91%AF%C6%9E%BD%60%3C%89%F7%8B1-%A4%A9%A6%23o%9DR*%0BMQ%8Fk%3F%7C%92%7E3%1Dy%B3%DD%B2%D5%D8%F3%FE%A7%B6%AD%ED%3D6%19%01%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%98%E7%07M%24E%C6%29%0A%10%B4%00%00%00%00IEND%AEB%60%82'
但是当我在image-size之后使用缓冲区时,我得到以下错误:
TypeError:不支持的文件类型:undefined(file:undefined)