创建一个字节数组以使用node-soap传递给SOAP服务

时间:2017-11-18 05:38:06

标签: node.js node-soap

对于API,我需要从本地pdf文件创建一个字节数组。

我已经检查过StackOverflow,但现有的解决方案不起作用。每当我尝试执行代码时,我都会收到来自soap API的错误请求。如果我发送零字节,那么我得到一个发送零字节的错误消息。凭证也有效。我唯一无法解决的是如何从pdf文件生成一个字节数组并通过node-soap发送它。

这是我的代码:

var fs = require('fs');
var zlib = require('zlib');
var soap = require('soap');
var path_to_wsdl = "url to wsdl";

var data = {};

data['Authentication'] = {
    'Username': "myusername",
    'Password': "mypass"
}

data['Options'] = {
    'Testmode': true
}

data['Recipient'] = {
    'Company': "Firma",
    'FirstName': 'Vorname',
    'Name': 'Name',
    'Address': 'Street Nr.',
    'Zip': "68753",
    'City': 'Stadt',
    'Country': 'DE'
}

var smabuf = fs.createReadStream('test.pdf');

data['File'] = {
    'Filename': "test.pdf",
    'Bytes': smabuf,
    'Color': false,
    'Duplex': false,
    'Enveloping': 0
}

soap.createClient(path_to_wsdl, function (err, client) {
    if (err) {
        console.log(err);
    }
    client.BriefManager.BriefManagerSoap.CreateJob(data, function (err, result) {
        if (err) {
            console.log(err);
        } else {
            console.log(result);
        }
    });
});

1 个答案:

答案 0 :(得分:0)

我正在解决此问题,我的解决方案是使用fs库读取base64编码的目标文件并在请求中发送它。

/**
 * Get a file buffer as a bytes array string
 * @param filePath Path to the file
 */
 getFileAsBytesArray(filePath) {
    return fs.readFileSync(filePath, { encoding: 'base64' });
 }

然后在“文件字节数”字段中使用它。