写入空白文件的fs.writeFileSync

我正在使用fs写一个PDF文件到磁盘,PDF文件包含7个页面,其中有内容,但是当文件被写入时,它没有任何内容。 整个文件是空白的。 以下是我正在使用的代码

request.get({ url: spConfig.host + spConfig.sitecollection + '_api/web/GetFileByServerRelativeUrl(\'/sites/MSDS/Construction/ProductLabels/SD32382_-_ADVA Cast 596_(B2).pdf\')/$value', headers: headers, json: true }).then(response => { console.log('Inside Success') // console.log(response) // let writeStream = fs.createWriteStream(__dirname+'/wsdl/attachment.pdf') console.log(response.length) try { fs.writeFileSync(__dirname+'/wsdl/attachment.pdf', response,'binary') console.log('File has been written successfully') } catch (err) { console.log('Error in writing file') console.log(err) } }).catch(err => { spResponseCount = spResponseCount + 1 reject(err) }) 

       

网上收集的解决方案 "写入空白文件的fs.writeFileSync"

fs.writeFileSyncfs.writeSyncfs.writeFile之间有混淆。

试试这个:

 try { fs.writeFileSync(__dirname+'/wsdl/attachment.pdf', response); console.log('Success in writing file') } catch (err) { console.log('Error in writing file') console.log(err) } 

如果结果不是你所期望的,你应该检查responsevariables的内容,并确保它被正确填充。

参考文献:

https://nodejs.org/docs/latest-v8.x/api/fs.html#fs_fs_writefile_file_data_options_callback https://nodejs.org/docs/latest-v8.x/api/fs.html#fs_fs_writefilesync_file_data_options


我试着重新创build你的代码,但是我不确定你用什么库来提取数据。 这个例子适合我:

 let request = require('request-promise'); let fs = require('fs'); request.get({ url: 'http://che.org.il/wp-content/uploads/2016/12/pdf-sample.pdf', encoding: null }) .then(response => { try { fs.writeFileSync(__dirname+'/attachment.pdf', response); console.log('Success in writing file') } catch (err) { console.log('Error in writing file') console.log(err) } }); 

编辑:

我的代码不能正常工作,因为我忘了将编码设置为空。 在请求的文档中,有这样的解释:

编码 – 编码用于响应数据的setEncoding。 如果为null,则正文返回为Buffer。 其他任何东西(包括未定义的默认值)都将作为编码parameter passing给toString()(这意味着默认情况下是有效的)。 (注意:如果你期望二进制数据,你应该设置encoding:null。)

https://www.npmjs.com/package/request#request-options-callback

writeFileSync的编码可以安全地删除。