2016-12-08 4 views
1

varbinary 열에 저장된 이미지가있는 타사 데이터베이스에 액세스하고 있습니다. SQL Server에 저장된 varbinary 이미지를 .jpg 파일로 복원하기 위해 node.js 응용 프로그램을 작성했습니다.Node.js MS의 varbinary에서 이미지로 변환하는 방법 Sql 서버 데이터 유형

varbinary를 쿼리 할 때 버퍼로 반환되지만 버퍼에서 이미지를 .jpg 파일로 복원 할 수 없습니다.

MS SQL 서버 액세스의 경우 https://www.npmjs.com/package/mssql 라이브러리를 사용 중입니다.

[업데이트 :] : 다음은 이미지로 변환하고 저장하는 몇 가지 방법입니다.

var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'base64'); 
var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'hex'); 
var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'uft8'); 
var decodedImage = varbinaryBufferReturedFromDatabase.toString('hex'); 
var decodedImage = varbinaryBufferReturedFromDatabase.toString('base64'); 
var decodedImage = varbinaryBufferReturedFromDatabase.toString('uft8'); 

fs.writeFile(__dirname+'/../public/images/img3.jpg', decodedImage, function(err, data){ 
      if (err) throw err; 
     console.log('It\'s saved!'); 
      cb(data); 
    }); 
+1

사용하려는 코드를 (가장 간단한 완전한 버전의) 코드로 표시하여 문제의 원인을 파악하는 데 도움을 줄 수 있습니다. More : [mcve] –

+0

이것은 당신에게 유용 할 수 있습니다. http://stackoverflow.com/questions/14915058/how-to-display-binary-data-as-image-extjs-4 –

+0

@ T.J.Crowder 이미지로 변환하기 위해 지금까지 시도한 코드를 업데이트했습니다. – vmasule

답변

3

내가 공부를 할 때까지이 어려웠다를 해결하는 방법을 인코딩/디코딩 및 varbinary 작품.

솔루션 : 이미지는 SQL Server에서 base64로 인코딩 된 문자열의 16 진수 표현으로 데이터 유형 varbinary로 저장되었습니다. 레코드 node.js를 가져 오는 동안 mssql 라이브러리는 16 진수를 javascript 버퍼로 변환합니다 (이 버퍼는 실제 이미지가 아닌 base64 인코딩 된 문자열입니다). Node.js를 MSSQL 라이브러리 : 는 그럼 .. 실제 이미지 버퍼 등으로 다시 변환 생성이어서 ..처럼 이미지의 문자열 base64 인코딩 다시

var decodedImage = new Buffer(originalBase64ImageStr , 'base64') 

fs.writeFile(__dirname+'/../public/images/img3.jpg', decodedImage, function(err, data){ 
      if (err) throw err; 
     console.log('It\'s saved!'); 
      cb(data); 
    }); 

참고

var originalBase64ImageStr = new Buffer(resultSet[0].Image).toString('utf8'); 

를 버퍼 변환 varbinary의 문자열 표현에 대해 다르게 작동합니다 (반환 된 버퍼는 원래 문자열의 표현이므로 위의 단계를 따를 필요가 없음). varbinary의 이미지/doc 표현 (반환 된 버퍼는 base64 인코딩 된 문자열의 표현이므로 위의 단계를 수행해야합니다.