首页 > 解决方案 > 附加base64编码文件nodejs

问题描述

我正在尝试发送带有附件的肥皂请求。一切正常,除了我发送的附件总是零字节。肥皂服务器接受 Base64 编码的文件,我已经使用代码在 Java 中实现了它

OutputStream outputStream = new ByteArrayOutputStream()
outputStream.writeTo(fileOutputStream);
Base64.encode(outputStream.toByteArray())//argument passed to the function which sends this to the SOAP API

我想用节点复制相同的内容,但我无法这样做。下面是我用来实现这一点的功能。我正在从客户端读取一些文件并尝试将其发送到 SOAP API。我已经在代码中标记了负责读取和附加数据的位置,其余部分仅供参考。

function createSoapEntryWithAtt(req,response){
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        let filesArr = []
        for(objkeys in files){
            filesArr.push(files[objkeys])
        }
        return Promise.all(filesArr.map(item => {
            return new Promise((res,rej) => {
                var oldpath = item.path;
                var newpath = 'C:/user/' + item.name;
                **var data = fs.readFileSync(oldpath).toString('base64');
                let result = []
                for (var i = 0; i < data.length; i += 2)// trying to create a 64bit byte array
                    result.push('0x' + data[i] + '' + data[i + 1])**

                console.log(result)
                if(data)
                    res({ [`${item.name}`]: result }) 
                rej("Error occured")
            })

        })).then(data => {
            let url = config.url
            var credentials = {
                AuthenticationInfo: {
                    userName: "user",
                    password: "passwd"
                }
            }
            let args = {
                Notes: "Testing From Node App",
            }
            let count = 0
            for (index in data) {
                if (count <= 3) {
                    **for(keys in data[index]){
                        //console.log(data[index][keys])
                        args[`Attachment${++count}_Name`] = keys
                       args[`Attachment${++count}_Data`] = data[index][keys]//Attaching the file read  
                    }
                }**
            }
            soap.createClient(url, function (err, client) {
                client.addSoapHeader(credentials)

                client.CreateWorkInfo(args, function (err, res) {
                    if (err) {
                        console.log("Error is ----->" + err)
                    } else {
                        console.log("Response is -----> " + res)
                        response.end();
                    }
                })
            })

        })

    });

}

标签: javascriptnode.jssoapui

解决方案


请忽略这个问题....如果有人在这个问题上浪费时间,谢谢和抱歉。这个错误是我这边的一个粗心的错误args["Attachment${++count}_Name"] = keys args["Attachment${++count}_Data"] = data[index][keys]。在这里,当我在两行中增加计数时,附件名称将为 1,然后在第二行中附件数据将为 02,因此名称不包含任何数据。


推荐阅读