编辑 - -
根据@Joni 对上述问题的评论,在通过pull request提交修复后,此问题似乎已得到纠正。
原始答案(来自OP)----
从对restler(并与维护者相对应)的研究来看,restler 似乎不能做我想做的事。注意:有人提交了一些代码,允许文件部分以流的形式出现,但它还没有被分支接受,而且我对流没有足够的经验。
我解决了回到基础的问题。我阅读了多部分的 RFC ( http://www.ietf.org/rfc/rfc2388.txt ),发现在构建正文时只需要注意一些规则,主要是一些额外的 \r\n 和 '- -'在正确的地方。
我决定简单地格式化原始 POST 正文并通过基本节点 http 客户端发送。
这有效:
var http = require('http');
postBody = new Buffer(
'------WebKitFormBoundaryebFz3Q3NHxk7g4qY' + "\r\n" +
'Content-Disposition: form-data; name="upload"; filename="filename.csv"' + "\r\n" +
'Content-Type: text/csv' + "\r\n" +
'\r\n' +
'comma,separated,values' + "\r\n" +
'------WebKitFormBoundaryebFz3Q3NHxk7g4qY' + "\r\n" +
'Content-Disposition: form-data; name="returnUrl"' + "\r\n" +
'\r\n' +
'http://return.url/' + "\r\n" +
'------WebKitFormBoundaryebFz3Q3NHxk7g4qY--'
);
var headers = {
"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryebFz3Q3NHxk7g4qY",
"Content-Length": postBody.length
};
//These are the post options
var options = {
hostname: 'myhost.com',
port: 80,
path: '/myPost',
method: 'POST',
headers: headers
};
// so we can see that things look right
console.log("postBody:\n" + postBody);
console.log("postBody.length:\n" + postBody.length);
var responseBody = '';
// set up the request and the callbacks to handle the response data
var request = http.request(options, function(response) {
// when we receive data, store it in a string
response.on('data', function (chunk) {
responseBody += chunk;
});
// at end the response, run a function to do something with the response data
response.on('end',function() {
console.log(responseBody);
});
});
// basic error function
request.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write our post body to the request
request.write(postBody);
// end the request
request.end();
我希望这可以帮助人们做多部分/表单数据。