如何在 Node.js 中处理不同的文件类型

How to handle different file types in Node.js

我正在尝试使用 Node.js 和 SHAREPOINT REST API
sp-request 库将文件上传和下载到 SharePoint 服务器 我能够处理文本文件,但当涉及到其他类型的文件(图像、docx ...)时,它们总是以损坏告终。
所以我想知道,我是否应该使用其他方法在我的 Node.js 代码中读取和写入文件。

上传方式:

fs.readFile('file1.png', 'utf8', function (err, file) {
spr.requestDigest('http://vm2008sharepo/')
    .then(function (digest) {
                return spr.post('http://vm2008sharepo/_api/web/getfolderbyserverrelativeurl(\'Documents\')/Files/Add(url=\'file1.png\')', {
                    body: file,
                    headers: {
                        'X-RequestDigest': digest,
                        'X-HTTP-Method': 'POST',
                        'IF-MATCH': '*',

                    }
                })
                    .then(postResult => {
                        console.log("File Added");
                    });


    })
    .catch(function (err) {
        console.log(err.stack);
    });
});


下载方式:

 var file = fs.createWriteStream("file2.odt");
        var path = 'file2.odt';
        spr.requestDigest('http://vm2008sharepo/')
            .then(function (digest) {
                spr.get('http://vm2008sharepo/_api/web/GetFileByServerRelativeUrl(\'/Documents/file2.odt\')/$value')
                    .then(function (response) {
                        try {
                            fs.writeFile(path, response.body);
                            console.log("File Downloaded");
                        } catch (error) {
                            console.log(error.stack);
                        }
                    });
            })
            .catch(function (err) {
                console.log(err.stack);
            });

原来我的 HTTP 调用正在发送 JSON 格式的文件,我不得不通过在我的代码中添加一行:

return spr.post('http://vm2008sharepo/_api/web/getfolderbyserverrelativeurl(\'Documents\')/Files/Add(url=\'file1.png\')', {
                    body: file,
                    json: false,
                    headers: {
                        'X-RequestDigest': digest,
                        'X-HTTP-Method': 'POST',
                        'IF-MATCH': '*',
                    }
                })