zoukankan      html  css  js  c++  java
  • node实现上传图片功能

    1.上传图片的功能点

    • 基础功能:上传图片、生成图片连接
    • 附加功能:限制上传图片的大小与类型、生成高中低三种分辨率的图片链接、生成CDN。

    2.技术方案

    • 阿里云OSS等服务器(花钱)
    • 直接上传服务器(不稳定,可以学习时使用)

    3.之前获取body我们使用的是koa-bodyparser,但这个不能获取文件信息,此时可以卸载koa-bodyparser。安装koa-body。

    使用如下,在入口文件引入并注册:

    const Koa = require('koa');
    //const bodyparser = require('koa-bodyparser');
    const koaBody = require('koa-body');
    const parameter = require('koa-parameter');
    const mongoose = require('mongoose');
    const app = new Koa();
    const error = require('koa-json-error');
    const routing = require('./routes');
    const { connectionStr } = require('./config');
    const path = require('path');
    
    mongoose.connect(connectionStr,{ useUnifiedTopology: true,useNewUrlParser: true },()=>{
        console.log('MongoDB 连接成功了!')
    })
    mongoose.connection.on('error',console.error)//监听mongo错误信息
    
    app.use(error());
    //app.use(bodyparser());
    app.use(koaBody({
        multipart:true,  //设置true表示支持文件
        formidable:{
            uploadDir: path.join(__dirname,'/public/uploads'), //设置图片上传的目录
            keepExtensions: true //图片上传后不改变扩展名
        }
    }))
    app.use(parameter(app));
    routing(app);
    
    
    
    
    
    app.listen(3000,()=>{
        console.log("项目已启动")
    })

    插件注册好之后,我们就可以写接口了,在router里照常写。controller获取这样做:

    class HomeCtl {
        index(ctx){
            ctx.body = "这是主页!"
        }
    
        upload(ctx){
            const file = ctx.request.files.file;//获取文件路径
            ctx.body = {
                path:file.path
            }
        }
    }
    
    module.exports = new HomeCtl()

    此时接口就写好了。我们可以zaipostman中进行请求:

     此时返回的是图片路径,我们需要的是url,我们要借助一个插件,koa-static:同样把插件引入并注册到入口文件:

    const Koa = require('koa');
    //const bodyparser = require('koa-bodyparser');
    const koaBody = require('koa-body');
    const parameter = require('koa-parameter');
    const koaStatic = require('koa-static');
    const mongoose = require('mongoose');
    const app = new Koa();
    const error = require('koa-json-error');
    const routing = require('./routes');
    const { connectionStr } = require('./config');
    const path = require('path');
    
    mongoose.connect(connectionStr,{ useUnifiedTopology: true,useNewUrlParser: true },()=>{
        console.log('MongoDB 连接成功了!')
    })
    mongoose.connection.on('error',console.error)//监听mongo错误信息
    
    app.use(koaStatic(path.join(__dirname,'public'))); //这个public以下的路径就是生成的url。
    app.use(error());
    //app.use(bodyparser());
    app.use(koaBody({
        multipart:true,  //设置true表示支持文件
        formidable:{
            uploadDir: path.join(__dirname,'/public/uploads'), //设置图片上传的目录
            keepExtensions: true //图片上传后不改变扩展名
        }
    }))
    app.use(parameter(app));
    routing(app);
    
    
    
    
    
    app.listen(3000,()=>{
        console.log("项目已启动")
    })

    写好后,就可以在浏览器访问图片目录:访问时,URL格式是“域名+上面配置的public下层的路径”

     这时我们去controller中修改一下路径即可:

    const path = require('path');
    class HomeCtl {
        index(ctx){
            ctx.body = "这是主页!"
        }
    
        upload(ctx){
            const file = ctx.request.files.file;
            const basename = path.basename(file.path);    //获取图片名称(basename)
            ctx.body = {
                url:`${ctx.origin}/uploads/${basename}`    //ctx.origin是域名
            }
        }
    }
    
    module.exports = new HomeCtl()
  • 相关阅读:
    ExtJS学习之路第一步:对比jQuery,认识ExtJS
    创建Windows服务(C++)
    吴恩达2014机器学习教程笔记目录
    在Hexo中渲染MathJax数学公式
    Linux服务器性能检测命令集锦
    Redis开启AOF导致的删库事件
    从表扩展增加列属性说起
    数据库规约解读
    MySQL规约(阿里巴巴)
    HDFS运行原理
  • 原文地址:https://www.cnblogs.com/kaiqinzhang/p/12146358.html
Copyright © 2011-2022 走看看