今天iOS同事说上传文件的接口不能用了…VC上没看到代码改动…然后查,发现APP运行在32位iOS系统OK,64位就悲剧了…原因呢?… 上传文档的Content-Type在64位系统上被偷偷加了一个charset属性,如下:
multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY
然后看了下multiparty的源码,它匹配Content-Type的正则如下:
/^multipart\/(form-data|related);\s*boundary=(?:"([^"]+)"|([^;]+))$/i;
果然,根本就匹配不上,所以解析自然出错(Express@3.4.2)。 我对http协议syntax了解不多,还望论坛的大大们看看,这个是什么个情况?@MiguelValentine 大神
As with all multipart MIME types, each part has an optional “Content-Type” header that defaults to “text/plain”. User agents should supply the “Content-Type” header, accompanied by a “charset” parameter.
(:з」∠) 兄弟你艾特错人了。向我这种不写正则的懒人,都是用的数组解的。
@MiguelValentine 那这个charset是应该要还是不要呀~
@DevinXian 你能写这个正则,难道还不能再加个charset了?
在中间加一段charset不就行了吗?
/^multipart\/(form-data|related);\s*(charset=[\S]*)?\s*boundary=(?:"([^"]+)"|([^;]+))$/i
@DevinXian 你用的multiparty
太老了吧。。。该升级了 https://github.com/andrewrk/node-multiparty/blob/master/index.js#L32