我正在尝试将dataUrl发送到客户端的服务器。
请求被发送到带有 Content-Type:multipart / form-data 的php脚本以及 image =(dataUri string)的键/值消息体
如果已成功收到,则会发回10位数的回复。如果不成功,则发送错误响应。
我使用datauri module生成dataurl
如果我尝试使用以下方法通过终端执行此操作:
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() ;
每次都失败。我注意到的一点:在终端中,Content-Length Number大于我在Node中使用Buffer.byteLength得到的几百字节。
很抱歉忽略服务器信息。我不确定我是否可以发布它...
任何人都可以给我任何提示,我应该阅读的任何信息链接,关键字,任何真的。我还有很长的路要走,这非常肯定我应该使用某种类型的抽象,比如Express,但你必须从某个地方开始。
答案 0 :(得分:1)
想通了。答案是here
我没有正确使用 Content-Disposition 。它并不意味着它是一个标题,它意味着成为消息体的一部分(这解释了更大的 Content-Length
正确的代码:
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() ;
答案 1 :(得分:0)
@Andreas的回答帮助我,但有一个错误(?)
\n${boundary}--`;
可能应该替换为
\n--${boundary}--`;