1

我一直在尝试使用 JS force 为节点 js 下载图像文件,并能够在检索数据并将其转换为 base64 格式后在本地创建一个文件,但如果显示“文件不支持消息”,同时能够下载 javascript 类型的文件有正确的数据。

我正在查询salesforce中知识文章的附件字段。

以下是我的查询:

SELECT Body__c, Attachment__Name__s, Attachment__ContentType__s, Attachment__Length__s, Attachment__Body__s, Id, KnowledgeArticleId, Title, UrlName FROM Knowledge__kav

我正在向文章的Attachment__Body__s字段发送 GET 请求。

以下是我的节点 js 代码:

function createFile(attachmentBody,attachmntContentType,attachmntName){
var req = {
url: attachmentBody,
method: 'GET',
headers: {
        "Content-Type": attachmntContentType
        }
    };
            
var test = conn.request(req, function(err, resp) {
    if (err) {
        console.log(err)
        } else {
                        
var fileBuffer=Buffer.from(resp, 'binary').toString('base64');
console.log('fileBuffer---  '+ fileBuffer);
fs.writeFile('./downloadedAttachments/'+attachmntName,fileBuffer,'base64', function(err){
    if (err) throw err
        console.log('File saved.')
        })
            
    }
});
}

请帮我解决一下这个。

4

1 回答 1

1

我成功地下载了正确格式的文件。以下是我更新的代码:

function createFile(knbid,attachmntName,callback) {
                    
            
        var file_here = conn.sobject('Knowledge__kav').record(knbid);
        
        file_here.retrieve(function (err, response) {
        if (err) {
            return console.error(err);
            callback(0)
            } else {
                
                var obj = fs.createWriteStream('./downloadedAttachments/'+attachmntName, {defaultEncoding: 'binary'})
                //console.log('blob--'+JSON.stringify(file_here.blob('Attachment__Body__s')));
                var stream = file_here.blob('Attachment__Body__s').pipe(obj);
            
                stream.on('finish', function (err, result) {
                
                    if (err)
                    console.log('not downloaded'+knbid);
                    else
                    console.log('downloaded-'+knbid);
                    
                })
            }
        });
        }

于 2020-06-24T13:17:16.750 回答