问题:
我想测试 formidable
模块包的 form.parse
,我自己用http
模块写了一个http.request
发送post请求,请问下如何将一个文件发过去,而不是解析里面的内容发过去,请教下这个API
是哪个。
用了web端的表单的提交方式
'<form method="post" enctype="multipart/form-data">'
+ '<p>File: <input type="file" name="file" /></p>'
+ '<p><input type="submit" value="Upload" /></p>'
+ '</form>'
完成了测试,请问下如果用node去模拟,该如何写呢,只会用fs
解析掉,然后只能发发数据,而不是发文件
直接pipe跟提交的form表单不一样吧。。 模拟form表单提交需要先写好 content-type=multipart/form-data,然后读取文件,拼凑成multipart/form-data的格式write到输出端。。 具体格式类似这种的,
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
直接pipe的话应该只包含了这一段
PNG ... content of chrome.png ...
这里有个post file的例子… https://github.com/samt/http-post
post 常见的提交数据方式
https://www.imququ.com/post/four-ways-to-post-data-in-http.html
如果用node提交multipart-form,可以用https://www.npmjs.com/package/request,
具体用法参考:
https://github.com/request/request#multipartform-data-multipart-form-uploads
如果要看具体实现,可以查看https://github.com/felixge/node-form-data
因为上述的request模块关于mulitpart-form底层用的还是form-data
http://visionmedia.github.io/superagent/#multipart-requests
var request = require('superagent');
request
.post('/upload')
.attach(<name>,<file path>,[file name])
.end(function(err,res){
});