这里有新鲜出炉的 Node.js 教程,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
这篇文章主要介绍了 node.js 文件上传处理的相关资料, 非常不错,具有参考借鉴价值,需要的朋友可以参考下。
直入主题,在 Node.js web 开发基本框架的前提下,我们来做一个文件上传功能
上传的 handler 比较简单,网上都能找到
- 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 = '<html>'+
- '<head>'+
- '<meta http-equiv="Content-Type" '+
- 'content="text/html; charset=UTF-8" />'+
- '</head>'+
- '<body>'+
- '<form action="/fileuploadaction" method="post" enctype="multipart/form-data">'+
- '<input name="name" type="text" />'+
- '<input name="upload" type="file" />'+
- '<input type="submit" value="Upload" />'+
- '</form>'+
- '</body>'+
- '</html>';
- response.write(body);
- response.end();
- }
- <span style="color: rgb(255, 0, 0);">function fileUploadAction(request,response){
- var fs=require('fs');
- var formidable=require('formidable');
- var baseUploadPath="./media/upload/";
- var form=new formidable.IncomingForm();
- form.uploadDir='./var/tmp';
- 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,{'Content-Type':'text/html'});//值得注意的是这里的response.writeHead()函数内容要写在form.parse()的callback中要不不会显示
- response.write('received image:</br>');
- response.write('<img src="/showuploadimage?name='+files.upload.name+'" />');
- response.end();
- }
- });
- }</span>
- function showUploadImage(request,response){
- var fs=require('fs');
- 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['/fileuploadform']=handlers.fileuploadform;
- handle['/fileuploadaction']=handlers.fileuploadaction;
- handle['/showuploadimage']=handlers.showuploadimage;
有一点需要注意的是,在有需要处理文件上传的时候,不能在 server 中添加
- request.setEncoding('utf8'); //设置这个很可能导致上传失败,这是formidable模块的一个bug吧
和
- request.addListener("data",
- function(tempPostData) {
- postData += tempPostData;
- });
- request.addListener("end",
- function() {
- route(request, response, postData, handle);
- });
来源: http://www.phperz.com/article/17/0505/330841.html