>  기사  >  웹 프론트엔드  >  node.js 파일 업로드 처리 예시

node.js 파일 업로드 처리 예시

高洛峰
高洛峰원래의
2016-12-24 17:19:381386검색

본론으로 가서 Node.js 웹 개발의 기본 프레임워크를 전제로 파일 업로드 기능을 만들어보겠습니다

업로드 핸들러는 비교적 간단하며 온라인에서 찾을 수 있습니다.

var url=require('url');
var exec=require('child_process').exec;
var querystring=require('querystring');
 
/********************************文件上传 第3方模块测试*************************/
function fileUploadForm(request,response){
 response.writeHead(200,{'Content-Type':'text/html'});
 var body = &#39;<html>&#39;+
  &#39;<head>&#39;+
  &#39;<meta http-equiv="Content-Type" &#39;+
  &#39;content="text/html; charset=UTF-8" />&#39;+
  &#39;</head>&#39;+
  &#39;<body>&#39;+
  &#39;<form action="/fileuploadaction" method="post" enctype="multipart/form-data">&#39;+
  &#39;<input name="name" type="text" />&#39;+
  &#39;<input name="upload" type="file" />&#39;+
  &#39;<input type="submit" value="Upload" />&#39;+
  &#39;</form>&#39;+
  &#39;</body>&#39;+
  &#39;</html>&#39;;
 response.write(body);
 response.end();
}
 
<span style="color: rgb(255, 0, 0);">function fileUploadAction(request,response){
 var fs=require(&#39;fs&#39;);
 var formidable=require(&#39;formidable&#39;);
 var baseUploadPath="./media/upload/";
 var form=new formidable.IncomingForm();
 form.uploadDir=&#39;./var/tmp&#39;;
 form.parse(request,function(error,fields,files){
  if(!error){
   console.log(fields);
   var desUploadName=baseUploadPath+files.upload.name;
   fs.renameSync(files.upload.path, desUploadName);
   response.writeHead(200,{&#39;Content-Type&#39;:&#39;text/html&#39;});//值得注意的是这里的response.writeHead()函数内容要写在form.parse()的callback中要不不会显示
   response.write(&#39;received image:</br>&#39;);
   response.write(&#39;<img src="/showuploadimage?name=&#39;+files.upload.name+&#39;" />&#39;);
   response.end();
  }
 });
}</span>
 
function showUploadImage(request,response){
 var fs=require(&#39;fs&#39;);
 var imageName=querystring.parse(url.parse(request.url).query);
 var baseUploadPath="./media/upload/";
 fs.readFile(baseUploadPath+imageName.name, "binary", function(error, file) {
  if(error) {
   response.writeHead(500, {"Content-Type": "text/plain"});
   response.write(error + "\n");
   response.end();
  } else {
   response.writeHead(200, {"Content-Type": "image/png"});
   response.write(file, "binary");
   response.end();
  }
 });
}
exports.fileuploadform=fileUploadForm;
exports.fileuploadaction=fileUploadAction;
exports.showuploadimage=showUploadImage;

동시에 index.js에

handle[&#39;/fileuploadform&#39;]=handlers.fileuploadform;
handle[&#39;/fileuploadaction&#39;]=handlers.fileuploadaction;
handle[&#39;/showuploadimage&#39;]=handlers.showuploadimage;

을 추가하세요

한 가지 주의할 점은 파일 업로드를 진행하면 서버에 파일을 업로드할 수 없습니다.

request.setEncoding(&#39;utf8&#39;);//设置这个很可能导致上传失败,这是formidable模块的一个bug吧

콘텐츠를 추가하세요. 모든 사람의 학습에 도움이 되고, 또한 모든 사람이 PHP 중국어 웹사이트를 지지해 주기를 바랍니다.

request.addListener("data",function(tempPostData){
   postData+=tempPostData;
  });
  request.addListener("end",function(){
   route(request,response,postData,handle);
  });

더 많은 node.js 파일 업로드 처리 예제 및 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

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