2016-06-18 6 views
2

node.js 서버를 작성 중이며 사이트의 일부로 사용자가 이미지를 업로드 할 수 있어야합니다. 이미지가 업로드되면 서버의 복사본이 손상되었습니다.Node.js 원시 이미지 데이터를 작성하십시오.

다음은 본문 파서의 스크립트입니다.

request.body = {}; 
var busboy = new Busboy({headers: request.headers}); 
busboy.on("field", function(fieldname, val) { 
    request.body[fieldname] = val; 
}); 
busboy.on("file", function(fieldname, file, filename) { 
    var fileContents = ""; 
    file.on("data", function(data) { 
    fileContents += data; 
    }); 
    file.on("end", function() { 
    request.body[fieldname] = {"filename": filename, "contents": fileContents}; 
    }); 
}); 
busboy.on("finish", function() { 
    next(request, response); 
}); 
request.pipe(busboy); 

텍스트 파일을 업로드하면 서버에서 이미지 파일을 올바르게 저장하지만 이미지 파일의 특정 기호는 올바르게 보내지도 수신되지 않습니다.

+1

파일을 ANSI로 작성 하시겠습니까? 뭐? 이미지 파일은 바이너리 데이터로 인코딩 선택에 실제로 의존하지 않습니다. 이 문제를 문제로 인식하게하는 원인은 무엇입니까? '손상된'파일을보고 HTTP 헤더 또는 일부 가비지 데이터가 포함되어 있는지 확인 했습니까? –

+0

코드가 없으면 진행 상황을 알기가 어렵습니다. – robertklep

+0

내가 업로드하는 파일에는 ‰ 같은 문자가 있지만 node.js 파일에 파일을 쓰면 become이됩니다. 그래서 파일을 쓸 때 문자를 지키기위한 다른 방법이 있습니까? –

답변

1

데이터가 버퍼이므로 기본적으로 문자열을 다른 문자열에 추가하여 인코딩하면 인코딩이 UTF8입니다. 솔루션은 문자열처럼 취급하지 않으며, 버퍼처럼 취급합니다. 그러면 잘못된 코드 포인트로 끝나지 않을 것입니다. - Patrick Roberts

패트릭이 말했듯이 문제는 fileContents += data;입니다. 이렇게하면 data 버퍼가 필요한 문자를 포함 할 수없는 문자열로 변환됩니다. 대신 배열에 각 데이터 버퍼를 추가 한 다음 모두 연결하여 파일에 기록했습니다.