• Node.js学习笔记【八】


    1

    上传图片

    上传图片的功能点

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

    上传图片的技术方案

    • 阿里云OSS等云服务,推荐在生产环境下使用(功能多,速度快,需要收费)
    • 直接上传到服务器,不推荐在生产环境下中使用(不稳定,分布式环境支持不是很好,不需要收费,适合学习中使用)

    使用koa-body中间件获取上传的图片

    操作步骤

    • 安装koa-body(既支持文件,又支持JSON和form),替换koa-bodyparser(只支持JSON和form两种格式的请求体,不支持文件这种格式)
    • 设置图片上传目录
    • 使用Postman上传文件

    使用npm i koa-body --save安装koa-body;使用npm uninstall koa-bodyparser --save卸载koa-bodyparser

    在index.js引入使用

    const koaBody = require('koa-body');
    app.use(koaBody({
      //支持文件
      multipart:true,
      formidable:{
        //设置目录
        uploadDir:path.join(__dirname,'/public/uploads'),
        //保留拓展名
        keepExtensions:true
      }
    }));
    

    在controllers->users.js定义上传方法

      upload(ctx){
        const file = ctx.request.files.file;
        ctx.body = { path:file.path };
      }
    

    在routes->home.js设置接口

    const {index,upload} = require('../controllers/home')
    router.post('/upload',upload)
    

    测试结果:

    image-20210808231017211

    使用koa-static中间件生成图片链接

    操作步骤

    • 安装koa-static:这个中间件可以帮助我们生成静态服务,它指定了一个文件夹,文件夹下所有的文件可以通过http服务来访问。
    • 设置静态文件目录
    • 生成图片链接

    使用npm i koa-static --save安装

    在index.js引入使用

    const koaStatic = require('koa-static');
    app.use(koaStatic(path.join(__dirname,'public')));
    

    在controllers->home.js编写代码生成图片链接

    const path = require('path');
    class HomeCtl {
      index(ctx){
        ctx.body = '<h1>这是主页</h1>';
      }
      upload(ctx){
        const file = ctx.request.files.file;
        const basename = path.basename(file.path);
        ctx.body = { url:`${ctx.origin}/uploads/${basename}`};
      }
    }
    

    可以看到上传图片成功后就返回了一个图片链接

    image-20210808232413260

    编写前端页面上传文件

    操作步骤

    • 编写上传文件的前端页面:上传文件的表单
    • 与后端接口联调测试

    在public下创建upload.html

    <form action="/upload" enctype="multipart/form-data" method="POST">
      <input type="file" name="file"><br>
      <button type="submit">上传</button>
    </form>
    

    打开网页:localhost:端口号/upload.html进行图片上传

    上传图片

    可以在input实现限制图片类型

    <input type="file" name="file" accept="image/png,image/jpeg">//或者写成.jpg,.png,/jpeg
    

    支持所有图片类型为image/*

  • 相关阅读:
    Python import与from import使用及区别介绍
    python with as的用法
    python32模拟鼠标和键盘操作
    Python简易爬虫
    C# 控制台程序 托盘图标 事件响应
    C#和.Net的关系
    springboot集成schedule
    工作-感觉越来越难了
    MAC VCS 提交代码
    编程规范
  • 原文地址:https://www.cnblogs.com/Small-Windmill/p/15116804.html
Copyright © 2020-2023  润新知