zoukankan      html  css  js  c++  java
  • uni-app开发的应用(小程序,app,web等),使用Node+Koa2开发的后端程序接收上传文件的方法

    uni-app使用使用Node+Koa2开发的后端程序接收上传的文件

    通过gitbook浏览此随笔

    通过其它客户端上传(h5,小程序等),接收方法一致

    使用koa接收时,我们需安装一个中间件koa-body

    安装所需中间件

    npm install --save koa-body
    

    配置koa-body

    //...code
    const Koa = require('koa');
    
    const koaBody = require("koa-body");
    
    const app = new Koa();
    app.use(koaBody({
        multipart: true,
        strict: false,//解析所有请求
        formidable: {
             maxFileSize: 200 * 1024 * 1024//文件大小限制
        }
    }))
    //...code
    

    uni-app中上传文件请求

    methods:{
        /**
        * 上传文件
        * @param {String} filePath 文件所在临时路径
        */
        uploadFile:function(filePath){
    		uni.uploadFile({
    			url:`${this.baseUrl}/file/upload`,
    			formData:{
                	account:"123456",
    				typeName:"水果"
    			},
    			filePath:filePath,
    			name:"file",
    			success: (res) => {
                    console.log(res.data);
                    // {code:200,filename:"文件名.xx"}
    			}
    		})
    	}
    }
    

    上传函数提示

    • 上传参数filePath 是uni.chooseImage API的成功回调参数tempPath(Array)中的内容

    接收文件代码

    const fs = require("fs");
    
    /**
     * 处理文件上传方法
     * @requestParam {Number} account 账号
     * @requestParam {String}  typeName 分类名称
     */
    const fn_uploadFile = async (ctx, next) => {
        // 获取body中携带的参数
        const { account, typeName } = ctx.request.body;
        // account:123456
        // typeName:水果
    
        // 通过ctx.request.files.file方法获取上传的文件对象
    
        // 获取文件名称与文件所在路径
        const { name: filename, path } = ctx.request.files.file;
    
        // 创建文件输入流
        const fileReader = fs.createReadStream(path);
        
        // 文件将要的存放文件夹路径
        const fileDir = `${__dirname}/../../../upload-static/images/${account}/${typeName}`;
    
        // 判断目录是否存在,目录不存在则创建
        if (!fs.existsSync(fileDir)) {
            try {
                fs.mkdirSync(fileDir);
            } catch (e) {
                console.error(e);
            }
        }
    
        // 保存文件的最终路径 (文件夹路径+文件名)
        const filepath = `${fileDir}/${filename}`;
        
        // 创建文件输出流
        const fileWriter = fs.createWriteStream(filepath);
    
        // 写入文件数据
        fileReader.pipe(fileWriter);
    
        // 至此文件已上传完成
    
        // 向客户端返回的内容
        ctx.response.body={
            code: 200,
            filename
        };
    }
    
    module.exports = {
        "POST /api/file/upload": fn_uploadFile
    }
    

    参考资源

    koa2

    koa-body

    node-formidable

    uni-app API文档

    uni-app 文件上传API文档

    uni-app 图片选择API文档

  • 相关阅读:
    python 矩阵转置
    go
    Go-GRPC 初体验
    SpringMVC笔记——Spring+MyBatis组合开发简单实例
    MyBatis笔记——EhCache二级缓存
    MyBatis笔记——Mapper动态代理
    MyBatis笔记——初次环境配置
    Spring笔记——配置Hibernate框架事务
    Hibernate笔记——关联关系配置(一对多、一对一和多对多)
    Mysql笔记——触发器简单实例
  • 原文地址:https://www.cnblogs.com/roseAT/p/11543635.html
Copyright © 2011-2022 走看看