写入空白文件的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
的编码可以安全地删除。
- Nodejs createReadStream只读取大型JSON文件的一个数据块
- 如何设置一个nodejs服务器,通过检查url来为客户端提供正确的文件?
- fs.appendFile,但如果path不存在,则失败
- 节点:fs write()不写入内部循环。 为什么不?
- 使用Electron访问Angular 2应用程序中的文件系统
- 依次使用node.js读取目录内所有文件的内容
- javascript正则expression式忽略chokidar的子目录
- 节点js FS accessSync设置全局variablespath失败
- fs.writeFileSync给出错误:UNKNOWN,在nodejs中写入同步文件的正确方法