2014-10-20 9 views
0

Я уже googled весь интернет, и я еще не нашел свою проблему. Я использую 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, multiparty, или formidable.

+0

В этом случае я получаю только одну часть, это значок. То, что я хочу, это разбор мультипартии, а затем сохранение файла на диске без использования модулей. –

+0

Удачи, написав парсер. – mscdex