zoukankan      html  css  js  c++  java
  • 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;//抛出错误
            }
        })
    }); 
  • 相关阅读:
    [LeetCode] Reverse Linked List II 解题报告
    [LeetCode] Search for a Range 解题报告
    Git教程
    今天使用VS2012遇到一个问题:"链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的"
    套接字的域和地址族
    套接口和I/O通信
    2010年第82届奥斯卡金像奖获奖影片名单
    恩信ERP7.10安装、定制和二次开发 (2)
    从 Google 代码库找到的好东西 [转]
    更自然的人机交互——2010微软技术节现场速递
  • 原文地址:https://www.cnblogs.com/potato-lee/p/6265752.html
Copyright © 2011-2022 走看看