2014-10-20 113 views
0

我已經搜索了所有的互聯網,但沒有找到我的問題。 我使用multipart上傳到nodejs,但我所有的文件都損壞了,我使用了很多解析解決方案,我可以用強大的方法來完成,但我想學習如何解析我自己的。 輸出文件的二進制代碼與原始[大小和二進制文件(我使用hexdump -C int終端進行檢查)]完全相同]。上傳到nodejs時損壞的文件/圖像

下面的代碼示例:

var http = require("http"); 
 
var fs = require("fs"); 
 

 
http.createServer(function(req, res){ 
 
    if(!((req.url === "/upload") && (req.method === "POST"))){ 
 
     home(res); 
 
    }else{ 
 
     upload(req, res); 
 
    } 
 
}).listen(8888); 
 

 
function home(res){ 
 
    res.end("<html><body><form action='/upload' method='post' enctype='multipart/form-data''><input name='file' type='file'/><input type='submit'></form></body></html>"); 
 
} 
 

 
function upload(req, res){ 
 
    
 
    var data = ""; 
 
    req.setEncoding("binary"); 
 
    req.addListener("data", function(chunk){ 
 
     data = chunk.split("\r\n")[4];/*This was my last chance, but it also failed*/ 
 
    }); 
 
    req.addListener("end", function(){ 
 
     res.end(); 
 
     console.log(data); 
 
     fs.writeFile("icone.ico", data, "binary", function(err){/*I also used fs.createWriteStream*/ 
 
      console.log("done"); 
 
     }); 
 
    }); 
 
}

回答

0

你發送一個多請求。這意味着它不僅僅是上傳單個文件的原始內容,還包括一個特殊的格式,允許多個部分,每個部分是一個單獨的表單字段(在您的情況下,只有1個部分 - 文件表單字段) 。你應該看看使用一個模塊,可以解析multipart/form-data請求,例如busboy,multipartyformidable

+0

在這種情況下,我只收到一個部分,它是一個圖標。 我想要的是解析多部分,然後將文件保存在磁盤上,而無需使用模塊。 – 2014-10-22 08:24:32

+0

寫一個解析器的好運氣。 – mscdex 2014-10-22 13:50:08