2017-11-21 15 views
2

디스크에 pdf 파일을 쓰는 데 fs를 사용하고 있습니다. pdf 파일에는 내용이있는 7 페이지가 들어 있지만 파일을 쓰면 내용이 없습니다. 전체 파일이 비어 있습니다. 아래는 내가 fs.writeFileSync, fs.writeSyncfs.writeFile 사이에 호환 문제가있어이fs.writeFileSync 빈 파일 쓰기

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) 
    }) 
+1

writeFileSync에서 콜백을 사용할 수 없으며 콜백은 비동기 쓰기 – cowCrazy

+1

응답인데, 어떤 유형입니까? (String, array) –

+0

응답은 바이너리 유형이며, pdf 파일 바이트 스트림입니다. – Jeet

답변

2

을 위해 사용하고있는 코드입니다. 이와

시도 : 결과가 없습니다 당신이 기대하는 것입니다

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의 내용 수표를주고 제대로 채워져 있는지 확인해야합니다.

참고 : 나는 시도했다

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


는 코드를 다시 만드는하지만 난 당신이 데이터를 추출하기 위해 사용중인 라이브러리 확실하지 않다. 이 예는 나와 함께 잘 작동 :

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) 
    } 
}); 

편집 : null로 인코딩을 설정하는 것을 잊었다 때문에

내 코드가 제대로 작동되지 않았습니다. 요청의 문서에는 다음과 같은 설명이 있습니다.

인코딩 - 응답 데이터의 setEncoding에 사용할 인코딩입니다. null 인 경우 본문은 버퍼로 반환됩니다. 기본값이 정의되지 않은 것을 포함하여) 인코딩 매개 변수 을 toString()에 전달합니다 (이는 기본적으로 사실상 utf8을 의미 함). (참고 : 바이너리 데이터를 기대 , 당신은 인코딩을 설정해야하는 경우 :. 널)

writeFileSync의 인코딩 안전하게 될 감소 할 수

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

+0

신속한 답변을 보내 주셔서 감사합니다. 파일이 쓰여지고 컨트롤이 try 블록에 떨어지면 로그를 '파일 쓰기 성공'으로 표시하지만 파일은 여전히 ​​비어 있습니다. – Jeet

+0

'writeFileSync' 앞에'console.log (response, response.length);를 추가하십시오. 나는 당신이 당신의 질문에 '응답'을 채우는 방법을 추가하면 더 좋을 것이라고 생각합니다. 왜냐하면 당신이 약속하지 않은 약속을 가지고 있다고 생각하기 때문입니다. – Stefano

+0

참조 용 실제 질문에서 전체 코드를 업데이트했습니다. 한번보세요. response.length는 콘솔에'96979'를 출력합니다. – Jeet