2013-02-02 32 views
0

我想知道如何将Variable-length binary data255216255224016747073700110010100255)转换为JPEG或PNG到网络浏览器?Node.JS将可变长度二进制数据转换为jpeg或png?

示例代码:

var Connection = require('tedious').Connection; 

    var config = { 
     "userName": "[email protected]", 
     "password": "pswd", 
     "server": "server.database.windows.net", 
     "options": { 
       "database": "db", 
       "encrypt": true, 
     } 
    }; 

    var connection = new Connection(config); 

    connection.on('connect', function(err) { 
      console.log("Connected"); 
     } 
    ); 

var Request = require('tedious').Request; 
var result, 
    resG; 

    function sendResponse() { 
     var vals; 
      // Convert to string then array 
     var resultA = result.toString().split(','); 
      // Now I can loop through the data returned 
     resultA.forEach(function(val, index, ar) { 
      if(vals == null) { 
       vals = val; 
      } else { 
       vals += val; 
      } 
     }); 
     resG.writeHead(200, {'Content-Type': 'text/html', 'Content-Length': vals.length}); 
     //console.log(vals); 
     //resG.end("<img src=\"data:image/jpg;base64," + vals + "\" />"); 
      // Output data returned from db as string 
     resG.end("" + vals); 
    } 

    function executeStatement() { 
     request = new Request("SELECT Photos FROM dbo.tbl WHERE FarmerFirstName='someName' AND FarmerLastName='someLastName'", function(err, rowCount) { 
       if (err) { 
        console.log(err); 
       } else { 
        console.log(rowCount + ' rows'); 
       } 
      }); 

      request.on('row', function(columns) { 
       columns.forEach(function(column) { 
        result = column.value; 
       }); 
      }); 

     request.on('doneInProc', function(rowCount, more) { 
        // Got everything needed from db move on to sending a response 
      sendResponse(); 
     }); 

      connection.execSql(request); 
    } 

var http = require('http'), 
    director = require('director'); 

var router = new director.http.Router({ 
    "/": { 
     get: executeStatement 
    } 
}); 

var server = http.createServer(function (req, res) { 
    // set global res var 
    resG = res; 
    router.dispatch(req, res, function (err) { 
    if (err) { 
     res.writeHead(404); 
     res.end(); 
    } 
}); 
}); 

server.listen(80); 

我用我的DB连接器繁琐主任我的路由器。

+0

是什么意思它转换成JPEG?什么是原始数据? – loganfsmyth

+0

将数据转换为base64字符串,并在浏览器中用作dataUri。 '新缓冲区(数据).toString('base64')' – RayViljoen

+0

@loganfsmyth原始数据在括号中,但不是全部,因为它有40,000个字符。此外,我需要将其转换为JPEG格式,因为当头部“Content-Type”设置为“image/jpeg”时,它无法正确显示。 – camelCaseD

回答

2

result已经是Image的字节数组。你不需要做任何奇特的转换。这应该工作。

function sendResponse() { 
    resG.writeHead(200, {'Content-Type': 'image/jpeg', 'Content-Length': result.length}); 

    resG.end(new Buffer(result)); 
} 

,或者如果你想为它作为一个HTML页面的一部分,这一点:

function sendResponse() { 
    resG.writeHead(200, {'Content-Type': 'text/html'}); 

    var vals = (new Buffer(result)).toString('base64') 

    resG.end("<html><body>" + 
     "<img src=\"data:image/jpg;base64," + vals + "\" />" + 
     "</body></html>"); 
} 
+0

Thx这帮了很大忙。 – camelCaseD