Express学习笔记(八)—— 文件上传与下载

文件上传
  1. 安装:npm install multer --save

  2. 导入

    let multer=require('multer')
    let fs=require('fs')
    
  3. 初始化上传对象

    // 配置上传对象,上传到当前目录下public文件夹的upload文件夹中
    // express快速创建的项目,当前目录相对于服务器启动对应的目录
    let upload = multer({ dest: './public/upload' })
    
  4. 上传文件路由

    // 上传单个文件
    post.post('/upload',upload.single('file'),(req,res)=>{
        let oldPath=req.file.destination+"/"+req.file.filename
        let newPath=req.file.destination+"/"+req.file.originalname
        // 更改上传文件的存储名称
        fs.rename(oldPath,newPath,(err,res)=>{
            console.log("名字更改成功")
        })
    })
    
  5. 上传多个文件,请参考 Multer-GitHub

  6. ajax上传

    <!--前端-->
    <form id="uploadform" method="post">
        <input id="input" type="file" name="file">
        <button id="submit">提交</button>
    </form>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script>
        let formData 
        $('#input').change(function (e) {
            let file = this.files[0]
            // 创建formData对象,将文件追加到formData对象中   
            formData= new FormData()     
            formData.append('file', file)
            // 预览图片
            // 生成url地址
            let imgUrl=window.webkitURL.createObjectURL(file)
            let img=new Image()
            img.src=imgUrl
            $('body').append(img)   
        })
        $("#submit").click(function () {
            $.ajax({
                url: "http://localhost:3000/users/upload",
                method: 'POST',
                data: formData,
                processData: false,
                contentType: false,
            }).then(res=>{
                console.log(res) // 上传成功
            })
        })
    </script>
    
    // 后端
    app.post('/upload',upload.single('file'),(req,res)=>{
        // 设置路由允许所有源访问,否则会发生跨域问题
        res.append("Access-Control-Allow-Origin","*")
        // 设置路由允许所有请求类型访问
        res.append('Access-Control-Allow-Content-Type',"*")
        let oldPath=req.file.destination+"/"+req.file.filename
        let newPath=req.file.destination+"/"+req.file.originalname
        fs.rename(oldPath,newPath,()=>{})
        res.json('上传成功')
    })
    
文件下载
  • 后端代码
    app.get('/download', async (req, res) => {
        res.download("./public/upload/jq.jpg")
    })
    
  • 前端代码
    <button id="download">下载</button>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script >
        $('#download').click(()=>{
            window.location.href="http://localhost:3000/users/download"
        })
    </script>
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值