Node.js 如何在nodejs中模拟带请求上传图像

Node.js 如何在nodejs中模拟带请求上传图像,node.js,image-uploading,web-crawler,Node.js,Image Uploading,Web Crawler,我想用模块请求模拟上传图像,我通过chrome网络获得请求光线加载,如下所示: ------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3 Content-Disposition: form-data; name="Filename" 2033103.jpg ------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3 Content-Disposition: form-data; name="FileType" Image --------

我想用模块请求模拟上传图像,我通过chrome网络获得请求光线加载,如下所示:

------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="Filename"

2033103.jpg
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="FileType"

Image
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="N"

1
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="F"

MemberIDCard
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="fileext"

*.jpg;*.png;*.gif
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="folder"

/Transport/
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="Filedata"; filename="2033103.jpg"
Content-Type: application/octet-stream


------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="Upload"

Submit Query
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3--
var buffer = fs.readFileSync('xxxx.png');

var data = { 
    Filename: 'xxxx.png', 
    FileType: 'Image', 
    N: 1, 
    F: 'MemberIDCard', 
    fileext: '.jpg;.png;*.gif', 
    folder: '/Transport/', 
    Upload: 'Submit Query', 
    Filedata: { 
        buffer : buffer, 
        filename : 'xxxx.png', 
        content_type : 'application/octet-stream' 
    } 
}

needle.post(uri, data, { multipart: true }, function(err, resp, body) {
    //do something... 
}); 
,我的代码如下:

request.post({
    uri: url,
    headers: {
        'content-type' : 'application/octet-stream'
    },
    form: {
        Filename: '2000.jpg',
        FileType: 'Image',
        N: 1,
        F: 'MemberIDCard',
        fileext: '*.jpg;*.png;*.gif',
        folder: '/Transport/',
        Upload: 'Submit Query'
    },
    body: 'http://t1.qpic.cn/mblogpic/bc65fe3404f5084b2d7e/2000.jpg'
}, function (error, response, body) {
    if (!error) {
        console.log(body);
    }
});

但是它似乎不起作用,我应该怎么做来模拟这个上传图像呢?

如果您在
表单
选项中使用文字对象,那么它将以
应用程序/x-www-form-urlencoded
的形式发送表单。您需要做的是发送
多部分/表单数据

var r = request.post({
    uri: url
}, function (error, response, body) {
    if (!error) {
        console.log(body);
    }
});
var form = r.form()
form.append('Filename', '2000.jpg');
form.append('FileType', 'Image');
form.append('N', '1');
form.append('F', 'MemberIDCard');
form.append('fileext', '*.jpg;*.png;*.gif');
form.append('folder', '/Transport/');
form.append('Filedata', request('http://t1.qpic.cn/mblogpic/bc65fe3404f5084b2d7e/2000.jpg'));
form.append('Upload', 'Submit Query');
,我使用模块,代码如下:

------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="Filename"

2033103.jpg
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="FileType"

Image
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="N"

1
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="F"

MemberIDCard
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="fileext"

*.jpg;*.png;*.gif
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="folder"

/Transport/
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="Filedata"; filename="2033103.jpg"
Content-Type: application/octet-stream


------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3
Content-Disposition: form-data; name="Upload"

Submit Query
------------Ef1cH2gL6GI3ae0ei4Ef1cH2gL6GI3--
var buffer = fs.readFileSync('xxxx.png');

var data = { 
    Filename: 'xxxx.png', 
    FileType: 'Image', 
    N: 1, 
    F: 'MemberIDCard', 
    fileext: '.jpg;.png;*.gif', 
    folder: '/Transport/', 
    Upload: 'Submit Query', 
    Filedata: { 
        buffer : buffer, 
        filename : 'xxxx.png', 
        content_type : 'application/octet-stream' 
    } 
}

needle.post(uri, data, { multipart: true }, function(err, resp, body) {
    //do something... 
});