我正在尝试将dataUrl发送到客户端的服务器。
请求被发送到一个 php 脚本,其内容类型为:multipart/form-data和image=(dataUri 字符串(的键/值消息正文
如果已成功接收,则会发回 10 位数字响应。 如果不成功,则会发送错误响应。
我正在使用 datauri 模块来生成数据网址
如果我尝试使用以下方法通过终端执行此操作:
val=`cat dataUri.txt` #generated via datauri module
curl -X POST -F 'image='$val http://xxx.yyyyyyy.com:8082/server/post.php
我成功了。
尝试使用节点和http.request时,我失败得很惨:(。通过反复试验和大量的谷歌搜索,我偶然发现了--trace-ascii,它为您提供了终端通信的非常详细的细分。所以我一直在尝试有效地复制标题等,希望我能让它工作。
我的请求代码目前如下所示:
var body = 'image='+dataUri ;
postOptions = {
headers: {
'Content-Type': 'multipart/form-data; boundary=------------------------69b2c2b9c464731d' ,
'Content-Disposition': 'form-data; name="image"' ,
'Content-Length': Buffer.byteLength(body) ,
'Accept': '*/*' ,
'Expect': '100-continue'
} ,
host: 'xxx.yyyyyyy.com' ,
port: '8082' ,
path: '/server/post.php' ,
method: 'POST'
} ;
// Set up the request
post_req = http.request(
postOptions,
function(res) {
//
res.setEncoding('utf8') ;
res.on('data', function (chunk) {
console.log('Response: ' + chunk) ;
}) ;
}) ;
// post the data
post_req.write(body) ;
post_req.end() ;
它每次都失败。 我注意到:在终端中,内容长度数比我在节点中使用Buffer.byteLength获得的量大几百个字节。
很抱歉省略了服务器信息。 我不确定我是否可以发布它...
谁能给我任何提示,任何我应该阅读的信息链接,关键字,任何东西。 我还有很长的路要走,很确定我应该使用某种类型的抽象,比如 Express,但你必须从某个地方开始。
想通了。 答案就在这里
我没有正确使用内容处置。它不是一个标头,它意味着是消息正文的一部分(这解释了更大的内容长度
正确的代码:
var boundary = '------------------------69b2c2b9c464731d'
var body = `--${boundary}
nContent-Disposition: form-data; name="image"
nContent-type: plain/text
nimage=${img}
n${boundary}--`;
postOptions = {
headers: {
'Content-Type': 'multipart/form-data; boundary='+boundary ,
'Content-Length': Buffer.byteLength(body)
} ,
host: 'xxx.yyyyyyyyyy.com' ,
port: '8082' ,
path: '/server/post.php' ,
method: 'POST'
} ;
// Set up the request
post_req = http.request(
postOptions,
function(res) {
//
res.setEncoding('utf8') ;
res.on('data', function (chunk) {
console.log('Response: ' + chunk) ;
}) ;
}) ;
// post the data
post_req.write(body) ;
post_req.end() ;
@Andreas的回答帮助了我,除了一个错误(?
这n${boundary}--`;
可能应替换为n--${boundary}--`;