웹 프론트엔드 JS 튜토리얼 nodejs 서버를 쉽게 생성하세요. (10): 업로드된 이미지를 처리하세요_node.js

nodejs 서버를 쉽게 생성하세요. (10): 업로드된 이미지를 처리하세요_node.js

May 16, 2016 pm 04:25 PM
nodejs 섬기는 사람

이 섹션에서는 사용자가 사진을 업로드하고 브라우저에 사진을 표시하는 것을 구현합니다.

여기서 사용할 외부 모듈은 Felix Geisendörfer가 개발한 node-formidable 모듈입니다. 업로드된 파일 데이터를 구문 분석하기 위한 좋은 추상화를 만듭니다.

이 외부 모듈을 설치하려면 cmd에서 다음 명령을 실행해야 합니다.

코드 복사 코드는 다음과 같습니다.

npm 설치는 만만치 않습니다

비슷한 정보가 출력되면 설치 성공입니다:
코드 복사 코드는 다음과 같습니다.

npm 정보 빌드 성공: formidable@1.0.14

설치가 성공적으로 완료되면 요청을 사용하여 소개할 수 있습니다.
코드 복사 코드는 다음과 같습니다.

var formidable = require(“형성 가능”);

여기서 이 모듈이 하는 일은 Node.js에서 구문 분석할 수 있는 HTTP POST 요청을 통해 제출된 양식을 변환하는 것입니다. 우리가 해야 할 일은 제출된 양식을 추상적으로 표현한 새로운 IncomingForm을 생성하는 것뿐입니다. 그런 다음 이를 사용하여 요청 개체를 구문 분석하고 양식에서 필요한 데이터 필드를 얻을 수 있습니다.

본 기사의 사례 이미지 파일은 /tmp 폴더에 저장되어 있습니다.

먼저 문제를 해결해 보겠습니다. 로컬 하드 드라이브에 저장된 파일을 브라우저에서 표시하는 방법은 무엇입니까?

fs 모듈을 사용하여 파일을 서버로 읽어옵니다.

/tmp/test.png 파일의 내용을 브라우저에 표시하도록 직접 하드 코딩된 /showURL에 대한 요청 핸들러를 추가해 보겠습니다. 물론 먼저 이미지를 이 위치에 저장해야 합니다.

저희 팀에서는 requestHandlers.js를 일부 수정할 예정입니다.

코드 복사 코드는 다음과 같습니다.

var querystring = require("querystring"),
fs = require("fs");
함수 시작(응답, postData) {
console.log("요청 핸들러 'start'가 호출되었습니다.");
var body = ''
'<머리>' ' 'content="text/html; charset=UTF-8" />'
'' '' '
' '' '' ''
''
'';
response.writeHead(200, {"Content-Type": "text/html"});
response.write(본문);
response.end();
}
함수 업로드(응답, postData) {
console.log("요청 핸들러 '업로드'가 호출되었습니다.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("다음 텍스트를 보냈습니다: " querystring.parse(postData).text);
response.end();
}
함수 표시(응답, postData) {
console.log("요청 핸들러 'show'가 호출되었습니다.");
fs.readFile("/tmp/test.png", "binary", function(error, file) {
if(오류) {
Response.writeHead(500, {"Content-Type": "text/plain"});
Response.write(오류 "n");
response.end();
} 그 밖의 {
response.writeHead(200, {"Content-Type": "image/png"});
Response.write(파일, "바이너리");
response.end();
}
});
}
수출.시작 = 시작;
수출.업로드 = 업로드;
내보내기.show = 표시;



또한 index.js의 경로 맵에 이 새 요청 핸들러를 추가해야 합니다.


코드 복사

코드는 다음과 같습니다.

var 서버 = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");
var 핸들 = {}
핸들["/"] = requestHandlers.start;
핸들["/start"] = requestHandlers.start;
핸들["/upload"] = requestHandlers.upload;
핸들["/show"] = requestHandlers.show;
server.start(router.route, 핸들);

서버를 다시 시작한 후 http://localhost:8888/show에 접속하시면 /tmp/test.png에 저장된 이미지를 보실 수 있습니다.

자, 마지막으로 원하는 것은 다음과 같습니다.

 /start 양식에 파일 업로드 요소 추가

 업로드된 이미지를 /tmp/test.png에 저장하기 위해 node-formidable을 업로드 요청 처리기에 통합합니다

 업로드된 이미지를 /uploadURL을 통해 HTML 출력에 삽입합니다.

첫 번째 항목은 간단합니다. HTML 양식에 multipart/form-data 인코딩 유형을 추가하고, 이전 텍스트 영역을 제거하고, 파일 업로드 구성 요소를 추가하고, 제출 버튼 사본을 "파일 업로드"로 변경하세요. 아래 requestHandler.js에 표시된 대로:

코드 복사 코드는 다음과 같습니다.

var querystring = require("querystring"),
fs = require("fs");
함수 시작(응답, postData) {
console.log("요청 핸들러 'start'가 호출되었습니다.");
var body = ''
'<머리>' ' 'content="text/html; charset=UTF-8" />'
'' '' ' '메서드="게시물">
'' '' ''
''
'';
response.writeHead(200, {"Content-Type": "text/html"});
response.write(본문);
response.end();
}
함수 업로드(응답, postData) {
console.log("요청 핸들러 '업로드'가 호출되었습니다.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("다음 텍스트를 보냈습니다: " querystring.parse(postData).text);
response.end();
}
함수 표시(응답, postData) {
console.log("요청 핸들러 'show'가 호출되었습니다.");
fs.readFile("/tmp/test.png", "binary", function(error, file) {
if(오류) {
Response.writeHead(500, {"Content-Type": "text/plain"});
Response.write(오류 "n");
response.end();
} 그 밖의 {
response.writeHead(200, {"Content-Type": "image/png"});
Response.write(파일, "바이너리");
response.end();
}
});
}
수출.시작 = 시작;
수출.업로드 = 업로드;
내보내기.show = 표시;



다음으로 두 번째 단계를 완료해야 합니다. server.js부터 시작합니다. postData 및 request.setEncoding 처리를 제거하고(이 부분은 node-formidable이 자체적으로 처리함) 대신 요청 개체를 How to에 전달합니다. 라우팅 요청:

코드 복사

코드는 다음과 같습니다. var http = require("http"); var url = require("url"); 함수 시작(경로, 핸들) {
함수 onRequest(요청, 응답) {
var 경로명 = url.parse(request.url).pathname;
console.log("" pathname "에 대한 요청이 수신되었습니다.");
Route(핸들, 경로명, 응답, 요청);
}
http.createServer(onRequest).listen(8888);
console.log("서버가 시작되었습니다.");
}
수출.시작 = 시작;



다음으로 router.js를 수정하고 이번에는 요청 객체를 전달합니다.

코드 복사

코드는 다음과 같습니다.

함수 경로(핸들, 경로명, 응답, 요청) {
console.log("pathname에 대한 요청을 라우팅하려고 합니다.");
if (typeof 핸들[경로 이름] === '함수') {
핸들[경로명](응답, 요청);
} 그 밖의 {
console.log("경로명에 대한 요청 핸들러를 찾을 수 없습니다.");
response.writeHead(404, {"Content-Type": "text/html"});
response.write("404 찾을 수 없음");
response.end();
}
}
수출.경로 = 경로;

이제 업로드 요청 핸들러에서 요청 객체를 사용할 수 있습니다. node-formidable은 업로드된 파일을 로컬 /tmp 디렉토리에 저장하는 작업을 처리하며

해야 할 일은 파일이 /tmp/test.png로 저장되었는지 확인하는 것입니다.

다음으로 아래 requestHandlers.js와 같이 파일 업로드 처리 및 이름 바꾸기 작업을 구성합니다.

코드 복사 코드는 다음과 같습니다.

var querystring = require("querystring"),
fs = require("fs"),
formidable = require("형성 가능");
함수 시작(응답) {
console.log("요청 핸들러 'start'가 호출되었습니다.");
var body = ''
'<머리>' ''
'' '' ' '메서드="게시물">
'' '' ''
''
'';
response.writeHead(200, {"Content-Type": "text/html"});
response.write(본문);
response.end();
}
함수 업로드(응답, 요청) {
console.log("요청 핸들러 '업로드'가 호출되었습니다.");
var form = new formidable.IncomingForm();
console.log("파싱하려고 합니다");
form.parse(요청, 함수(오류, 필드, 파일) {
console.log("파싱 완료");
fs.renameSync(files.upload.path, "/tmp/test.png");
response.writeHead(200, {"Content-Type": "text/html"});
response.write("받은 이미지:
");
response.write("");
response.end();
});
}
함수 표시(응답) {
console.log("요청 핸들러 'show'가 호출되었습니다.");
fs.readFile("/tmp/test.png", "binary", function(error, file) {
if(오류) {
Response.writeHead(500, {"Content-Type": "text/plain"});
Response.write(오류 "n");
response.end();
} 그 밖의 {
response.writeHead(200, {"Content-Type": "image/png"});
Response.write(파일, "바이너리");
response.end();
}
});
}
수출.시작 = 시작;
수출.업로드 = 업로드;
내보내기.show = 표시;



이렇게 하면 서버가 완성됩니다.

이미지 업로드 과정에서 다음과 같은 문제가 발생할 수 있습니다.

이 문제의 원인은 디스크 파티션 때문인 것 같습니다. 이 문제를 해결하려면 formidable의 기본 제로타임 폴더 경로를 변경하여 대상 디렉터리와 동일한 디스크 파티션에 있도록 해야 합니다.

requestHandlers.js의 업로드 기능을 찾아 몇 가지 수정합니다.

코드 복사

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

nodejs와 vuejs의 차이점 nodejs와 vuejs의 차이점 Apr 21, 2024 am 04:17 AM

Node.js는 서버측 JavaScript 런타임인 반면, Vue.js는 대화형 사용자 인터페이스를 생성하기 위한 클라이언트측 JavaScript 프레임워크입니다. Node.js는 백엔드 서비스 API 개발, 데이터 처리 등 서버 측 개발에 사용되고, Vue.js는 단일 페이지 애플리케이션, 반응형 사용자 인터페이스 등 클라이언트 측 개발에 사용됩니다.

nodejs는 백엔드 프레임워크인가요? nodejs는 백엔드 프레임워크인가요? Apr 21, 2024 am 05:09 AM

Node.js는 고성능, 확장성, 크로스 플랫폼 지원, 풍부한 생태계, 개발 용이성 등의 기능을 제공하므로 백엔드 프레임워크로 사용할 수 있습니다.

nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? nodejs 설치 디렉토리에 있는 npm과 npm.cmd 파일의 차이점은 무엇입니까? Apr 21, 2024 am 05:18 AM

Node.js 설치 디렉터리에는 npm과 npm.cmd라는 두 가지 npm 관련 파일이 있습니다. 차이점은 다음과 같습니다. 확장자가 다릅니다. npm은 실행 파일이고 npm.cmd는 명령 창 바로 가기입니다. Windows 사용자: npm.cmd는 명령 프롬프트에서 사용할 수 있으며, npm은 명령줄에서만 실행할 수 있습니다. 호환성: npm.cmd는 Windows 시스템에만 해당되며 npm은 크로스 플랫폼에서 사용할 수 있습니다. 사용 권장사항: Windows 사용자는 npm.cmd를 사용하고, 기타 운영 체제는 npm을 사용합니다.

nodejs를 mysql 데이터베이스에 연결하는 방법 nodejs를 mysql 데이터베이스에 연결하는 방법 Apr 21, 2024 am 06:13 AM

MySQL 데이터베이스에 연결하려면 다음 단계를 따라야 합니다. mysql2 드라이버를 설치합니다. mysql2.createConnection()을 사용하여 호스트 주소, 포트, 사용자 이름, 비밀번호 및 데이터베이스 이름이 포함된 연결 개체를 만듭니다. 쿼리를 수행하려면 Connection.query()를 사용하세요. 마지막으로 Connection.end()를 사용하여 연결을 종료합니다.

nodejs는 백엔드 개발 언어인가요? nodejs는 백엔드 개발 언어인가요? Apr 21, 2024 am 05:09 AM

예, Node.js는 백엔드 개발 언어입니다. 서버 측 비즈니스 로직 처리, 데이터베이스 연결 관리, API 제공 등 백엔드 개발에 사용됩니다.

nodejs의 전역 변수는 무엇입니까 nodejs의 전역 변수는 무엇입니까 Apr 21, 2024 am 04:54 AM

Node.js에는 다음과 같은 전역 변수가 존재합니다. 전역 개체: 전역 핵심 모듈: 프로세스, 콘솔, 필수 런타임 환경 변수: __dirname, __filename, __line, __column 상수: undefine, null, NaN, Infinity, -Infinity

nodejs와 java 중 어느 것을 선택해야 합니까? nodejs와 java 중 어느 것을 선택해야 합니까? Apr 21, 2024 am 04:40 AM

Node.js와 Java는 각각 웹 개발에 장단점이 있으며 선택은 프로젝트 요구 사항에 따라 다릅니다. Node.js는 실시간 애플리케이션, 신속한 개발 및 마이크로서비스 아키텍처에 탁월한 반면, Java는 엔터프라이즈급 지원, 성능 및 보안에 탁월합니다.

nodejs와 java 사이에 큰 차이가 있나요? nodejs와 java 사이에 큰 차이가 있나요? Apr 21, 2024 am 06:12 AM

Node.js와 Java의 주요 차이점은 디자인과 기능입니다. 이벤트 중심 대 스레드 중심: Node.js는 이벤트 중심이고 Java는 스레드 중심입니다. 단일 스레드 대 다중 스레드: Node.js는 단일 스레드 이벤트 루프를 사용하고 Java는 다중 스레드 아키텍처를 사용합니다. 런타임 환경: Node.js는 V8 JavaScript 엔진에서 실행되는 반면 Java는 JVM에서 실행됩니다. 구문: Node.js는 JavaScript 구문을 사용하고 Java는 Java 구문을 사용합니다. 목적: Node.js는 I/O 집약적인 작업에 적합한 반면, Java는 대규모 엔터프라이즈 애플리케이션에 적합합니다.

See all articles