Coder Social home page Coder Social logo

node's People

Stargazers

 avatar

Watchers

James Cloos avatar

node's Issues

node.js文件分片上传

后端

const express=require('express');
const body=require('body-parser')
const multiparty=require('multiparty');
const fse=require('fs-extra');//fs的替代模块,有fs的所有方法
const path=require('path');
const fs=require('fs')
 
const app=new express();
app.use(express.static(__dirname+'/public'))
app.use(body.urlencoded({extended:true}))
app.use(body.json())
 
const PUBLIC_PATH=path.resolve(__dirname,'public/upload')
 
app.post('/upload',(req,res)=>{
     const form=new multiparty.Form({uploadDir:'temp'})//选择上传目录
     form.parse(req)
//监听文件上传
     form.on('file',async(name,chunk)=>{
//命名文件夹
         let chunkDir=`${PUBLIC_PATH}/${chunk.originalFilename.split('.')[0]}`
         if(!fse.existsSync(chunkDir)){       //目录不存在
             await fse.mkdirs(chunkDir)
         }
         var dPath=path.join(chunkDir,chunk.originalFilename.split('.')[1])
         await fse.move(chunk.path,dPath,{overwrite:true})
         res.send('文件上传成功');
     })
}
)
//合并分片
app.post('/merge',async function(req,res){
    var name=req.body.name
    var fname=name.split('.')[0]
    let chunkDir=path.join(PUBLIC_PATH,fname);
    let chunks=await fse.readdir(chunkDir);
     chunks.sort((a,b)=>{
         a-b;
     }).map(chunkPath=>{
//合并文件        
fs.appendFileSync(path.join(PUBLIC_PATH,name),fs.readFileSync(`${chunkDir}/${chunkPath}`))
     })
//移除分片目录
    fse.removeSync(chunkDir);
    res.send({merge:'合并成功'})
})
 
app.listen(4050,()=>{console.log('开启端口')});

前端

//前端
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <input type="file">
    <button>上传</button>
    
    <script src="axios.js"></script>
    <script>
        let btn=document.getElementsByTagName('button')[0]
        let input=document.getElementsByTagName('input')[0]
        var chunkSize=1024*1024 //分片大小,每次1mb
        let index=0;
        btn.onclick=function(){
 
            let file=input.files[0]
  
            let [fname,fext]=file.name.split('.')
            
            let start=0;
            upload(0)
            function upload(index){
                console.log(index)
                start=index*chunkSize
              //文件上传完合并
                if(start>file.size){
                    axios.post('/merge',{name:file.name}).then(data=>{console.log(data)})
 
                    return;
                }
            
 
            let formdata=new FormData()
           
            
 
           let blob=file.slice(start,start+chunkSize)
           
           let blobName=`${fname}.${index}.${fext}`;
           let blobFile=new File([blob],blobName)
         
         
        formdata.append('file',blobFile)
           
          
      
        axios.post('/upload',formdata).then(data=>{
            console.log(data)
            upload(++index)
        })
        }
        }
    </script>
</body>
</html>

node的nodemailer

node的nodemailer可以用来发送邮件

var express=require('express')
var app=new express();

var nodemailer=require('nodemailer')

var mailTransport=nodemailer.createTransport({
    host:'smtp.qq.com',
    secureConnection:true,
    auth:{user:'[email protected]',//发送者邮箱
        pass:'zqzlkszjxemeeeed'//发送者邮箱授权码
}
})
app.listen(4000)
/* 浏览器输入地址(如127.0.0.1:4000/send)后即发送 */
app.get('/send', function(req, res, next) {
    var options = {
        from        : '"发件人姓名" <[email protected]>',
        to          : '"用户1" <[email protected]>',
        subject        : '一封来自Node Mailer的邮件',
        text          : '一封来自Node Mailer的邮件',
        html           : '<h1>你好,这是一封来自NodeMailer的邮件!</h1><p>haha</p>(正文)',
        attachments : 
                    [
                        {
                            filename: '1.png',            // 改成你的附件名
                            path: 'public/1.png',  // 改成你的附件路径
                            cid : '00000001'                 // cid可被邮件使用
                        },
                      
                    ]
    };
    
    mailTransport.sendMail(options, function(err, msg){
        if(err){
            console.log(err);
            res.render('index', { title: err });
        }
        else {
            console.log(msg);
            res.render('index', { title: "已接收:"+msg.accepted});
        }
    });
});

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.