写入空白文件的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.writeSync
和fs.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) }
如果结果不是你所期望的,你应该检查response
variables的内容,并确保它被正确填充。
参考文献:
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
的编码可以安全地删除。