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;//抛出错误
        }
    })
}); 
posted @ 2017-01-09 16:38  potato~e-e  阅读(3589)  评论(0编辑  收藏  举报