ホームページ >ウェブフロントエンド >jsチュートリアル >node.jsファイルアップロード処理例

node.jsファイルアップロード処理例

高洛峰
高洛峰オリジナル
2016-12-24 17:19:381411ブラウズ

本題に進みます。Node.js Web 開発の基本フレームワークを前提として、ファイルアップロード関数を作成します

アップロードハンドラーは比較的単純で、オンラインで見つけることができます

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;

同時に、

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

をindex.jsに追加します

注意すべき点は、ファイルのアップロードを処理する必要がある場合、サーバーに

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

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

を追加できないことです

上記は次のとおりですこの記事の内容全体が皆様のお役に立てば幸いです。また、皆様も PHP 中国語 Web サイトをサポートしていただければ幸いです。


その他のnode.jsファイルのアップロード処理例と関連記事については、PHP中国語Webサイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。