-
Notifications
You must be signed in to change notification settings - Fork 17
向Lark的服务POST数据 文件
Sun,Haohao edited this page Oct 27, 2015
·
1 revision
增加receive
方法,通过receive
方法将post的数据进行处理,并放到request.body
中。
方案示例如下:
yield this.receive('json', 'urlencoded');
console.log(this.request.body);
POST的数据为:
curl -X POST 'localhost:3000/post' -d 'a=b%20c&d=e'
结果是:
{ a: 'b c', d: 'e' }
对于multipart/form-data
的数据,则可以使用如下方法进行处理:
yield this.receive('multipart/form-data');
console.log(this.request.body);
获得的数据:
{ userfile:
{ filename: 'haha.jpg',
name: 'userfile',
mime: 'image/jpeg',
mimeType: 'image/jpeg',
content: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 60 00 60 00 00 ff db 00 43 00 06 04 05 06 05 04 06 06 05 06 07 07 06 08 0a 10 0a 0a 09 09 0a 14 0e 0f 0c ... > } }
可见post的图片被转换成了buffer。
大多数情况下并不需要对post来的文件直接进行处理,而是进行保存,所以提供了一个saveAs
参数,如:
yield this.receive('multipart/form-data', {
saveAs: 'upload/{name}.jpg',
});
// alternative solution:
yield this.receive('multipart/form-data', {
saveAs: function (readable) { return 'upload/' + readable.name + '.jpg'; },
});
上述2个方案是等价的,不过必须保证readable下有name属性
这样上传之后,文件会被保存在对应的位置(通过管道的方式,因此不会占用过多的内存),这样得到的结果中不会有content
而是被saveAs
取代,saveAs
中是保存的最终位置:
{ userfile:
{ filename: 'haha.jpg',
name: 'userfile',
mime: 'image/jpeg',
mimeType: 'image/jpeg',
saveAs: '/Users/mbu-se-vc/haohao/projects/appPost/upload/userfile.jpg' } }
已经和上一版进行兼容,选择对于urlencoded的数据,系统会自动执行receive函数,因此可以直接用this.request.body
获取到数据。