2016-07-27 56 views
0

我有一個AS3應用程序向我發送一個來自http post的jpeg編碼的字節數組。我的節點應用程序將採取這一點,並保存在本地文件系統作爲JPG格式。NodeJS從字節數組寫入JPG

AS3的JPEG編碼器是從as3 core lib

代碼:

var results = new Object(); 
    results.success = false; 
    results.message = debugWrite("Post Recieved \r\n"); 
    processPost(request, response, function() { 

     results.message += debugWrite("path: " + FILEPATH + "\r\n"); 

     //save jpg 
     var buffer = new Buffer(request.post, 'binary'); 
     fs.writeFile(FILEPATH, buffer, "binary", function(error){ 
      if(error != null){ 
       results.message +=debugWrite("Error: "+ error + "\r\n"); 
      }else{ 
       results.message += debugWrite("OK - Saved"); 
       results.success = true; 
      } 
     }); 

     response.writeHead(200, "OK", {'Content-Type': 'application/json'}); 
     response.write(JSON.stringify(results)); 
     response.end(); 
    }); 
} 

var processPost = function(request, response, callback) { 
    var queryData = ""; 
    if(typeof callback !== 'function') return null; 

    if(request.method == 'POST') { 
     request.on('data', function(data) { 
      queryData += data; 
      if(queryData.length > 1e6) { 
       debugWrite("Request To Large"); 
       queryData = ""; 
       response.writeHead(413, {'Content-Type': 'text/plain'}).end(); 
       request.connection.destroy(); 
      } 
     }); 

     request.on('end', function() { 
      request.post = queryData; 
      callback(); 
     }); 

     } else { 
      response.writeHead(405, {'Content-Type': 'text/plain'}); 
      response.end(); 
     } 
} 

目前,它是保存文件,但該文件不是視圖能。 任何提示都非常感謝。

php使用「file_put_contents」完成了任務,但我需要將功能移至節點服務器。

+0

'新緩衝液(數據,編碼)'是棄用。改爲使用'Buffer.from(data,encoding)'。嘗試添加'console.log(request.post)'。如果緩衝區數據沒問題,那麼開始時的咬合必須等於來自任何jpeg文件的咬合,例如, 'FF D8 FF E0 00 10 46 4A 49 46 00 01 01 01 00 60'(它是永久的jpeg文件頭)。 –

+0

@AikonMogwai fd fd fd fd 00 10 4a 46 49 46 00 01 01 00 00 01是我得到的起始字節。另外,尾部字節不正確。還有什麼地方可以接收字節不同於我以前使用的php腳本? –

+0

你可以發佈圖像作爲文件接收的圖像?我發現這個頭可以通過一些jpg版本來改變:( –

回答

0

來自請求數據事件的數據是完美的,所以我使用了writestream。不知何故,收集所有數據搞砸了信息。

代碼:

//server handling route 
if(QD === "/postImage"){ 
    processPost(request, response, filename); 
} 

var processPost = function(request, response, name) { 
    if(request.method == 'POST') { 
     //repsonse object 
     var results = new Object(); 
     results.success = false; 
     results.message = debugWrite("Post Recieved \r\n"); 
     results.message += debugWrite("HREF: " + name + "\r\n"); 

     //make write stream 
     var ImageFile = fs.createWriteStream(PATH+'/public/assets/'+name); 

     //on data 
     request.on('data', function(data) { 
      //write to file 
      ImageFile.write(data); 
     }); 

     //on end 
     request.on('end', function() { 
      //finish write 
      ImageFile.end(); 
      response.writeHead(200, "OK", {'Content-Type': 'application/json'}); 
      response.write(JSON.stringify(results)); 
      response.end(); 
     }); 

    } else { 
     response.writeHead(405, {'Content-Type': 'text/plain'}); 
     response.end(); 
    } 
}