zoukankan      html  css  js  c++  java
  • 前端Node实现简易的文件上传下载

    前端代码

    文件名:register.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <input type="file" id="upfile">
        <button onclick="submit()">提交</button>
        <img src="#" alt="" id="img">
        <a href="" id="download" download="a.jpg">点我下载</a>
        <script>
            
            function submit () {
                var img = document.getElementById('img');
                var download = document.getElementById('download');
    
                var file = document.getElementById('upfile');
                //利用htmlAPI FormData
                var formData = new FormData();
                formData.append('img',file.files[0]);
    
                //发送请求
                var xhr;
                if (window.XMLHttpRequest) {
                    xhr = new XMLHttpRequest();
                } else {
                    xhr = ActiveXObject();
                }
                xhr.open('post','/imgData',true);
                xhr.onreadystatechange = function () {
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        var res = JSON.parse(xhr.responseText);
                        // 这一步,将上传成功之后,后端传回来一个地址,继续发送请求数据,后端只管读取数据返回就行,浏览器会自动识别
                        img.src = '/getImgData?path=' + res.path;
                        //下载,给a标签加上一个download属性就行,后端只管读取数据返回
                        download.href = '/getImgData?path=' + res.path;
    
                    }
                }
                xhr.send(formData);
            }
            
        
        </script>
    </body>
    </html>
    
    

    NodeJS代码

    下载所需要的模块

    npm install express
    npm install multer
    
    var express = require('express');
    var url = require('url');
    var fs = require('fs');
    var multer = require('multer');  //处理上传的文件模块
    var app = new express();
    
    var uploadSingle = multer({dest: './uploadFile/'}); //dest: 配置默认上传之后存储的文件夹
    
    
    //这个返回的前端代码页面
    app.get('/login',function (req,resp) {
        var loginhtml = fs.readFileSync('./register.html');
        resp.end(loginhtml);
    })
    
    
    //处理多张图片上传的时候,用uploadSingle.array('img),则request.file得到的是一个数组
    //single里面的'img'要与前端上传时的name属性的值一致
    app.post('/imgData',uploadSingle.single('img'),function (request,response) {
        // 上传之后会自动保存到定义的文件夹下,一些相关信息在request.file当中
        var path = request.file.path;
    
        // ...存储到数据库等操作,把得到的存储地址返回给前端,用于后面前端好发送请求读取数据
    })
    
    app.get('/getImgData',function (request,response) {
        //得到前端传递过来的要读取的文件的路径
        var path = url.parse(request.url,true).query;
    
        try {
            var data = fs.readFileSync(path);
            //返回读取到的数据
        }catch(e) {
            //读取发生错误。。
        }
       
    })
    
    
    app.listen(8081,function () {
        console.log('服务已启动');
    })
    
    
  • 相关阅读:
    BZOJ4896 THUSC2016补退选(trie)
    BZOJ4892 Tjoi2017dna(后缀数组)
    BZOJ4890 Tjoi2017城市
    BZOJ4888 Tjoi2017异或和(树状数组)
    BZOJ4887 Tjoi2017可乐(动态规划+矩阵快速幂)
    BZOJ4883 棋盘上的守卫(环套树+最小生成树)
    BZOJ4881 线段游戏(二分图+树状数组/动态规划+线段树)
    BZOJ4878 挑战NP-Hard(dfs树)
    BZOJ5466 NOIP2018保卫王国(倍增+树形dp)
    BZOJ4873 Shoi2017寿司餐厅(最小割)
  • 原文地址:https://www.cnblogs.com/fanzhikang/p/12487398.html
Copyright © 2011-2022 走看看