Nodejs 上传下载功能的实现(同步)
上传和下载可分为两种,一种是form表单的形式(同步),另一种是Ajax的形式(异步)。
示例一(form表单):
html代码如下:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <form action="uploadfile.do" method="post" enctype="multipart/form-data"> <!--上传上来的是文本格式,用enctype转换成数据格式--> <input type="file" name="myfile"/><!--file为专门使用上传的表单项--> <button>上传</button> </form> </body> </html>
代码路径截图如下:
app.js文件的代码如下:
"use strict"; const myExpress=require("express"); //调用模块 const app=myExpress();//创建服务器 const myfs=require("fs");//文件的输入输出 app.configure(function(){ app.use(myExpress.logger("dev")); app.use(myExpress.bodyParser({uploadDir:"./public/temp"})); app.use(myExpress.methodOverride()); app.use(myExpress.static(__dirname+"/public")); app.use(myExpress.favicon(__dirname+"/public/image/logo-2.png")); app.use(myExpress.errorHandler()); }); app.set("port","8080"); app.listen(app.get("port"),function(){ console.log("服务启动jan09"); }); //上传上来的文件一般都存在C盘的临时文件中,若要存储在服务器重需要设置一个临时存储地,还需要在 //服务器配置中的bodyParserz中配置bodyParser({uploadDir:".public/temp"{) app.post("/uploadfile.do",function(req,res){ console.log(req.files);//文件上传请求信息 let username="zzz";//这里的name需要用户登录,存在session中,然后从session中取出来 let tempPath=req.files.myfile.path;//找到临时路径 let filename=req.files.myfile.originalFilename; let targetPath="./public/upload/"+username+"/"+filename;//将文件放入上传上来的目标路径 if(myfs.existsSync("./public/upload/"+username)==false){//判断upload路径下是否存在该用户的文件夹 myfs.mkdirSync("./public/upload/"+username);//没有的话,就创建一个文件夹 } myfs.rename(tempPath,targetPath,function(err,data){ console.log(err); console.log(data); if(err==null){ res.send("upload succeed!"); }else{ throw err;//抛出错误 } })
});