Day18-1-文件上传

文件上传

一 文件上传

(1)下载插件

npm i multer

(2)在utils文件夹创建handleFile.js

// 文件上传 npm i multer
const multer = require('multer');
const fs = require('fs');
const path = require('path');

/**
 * 文件上传
 * 参数说明:接收一个 options 对象作为参数,该对象包含三个属性
 * - path:图片上传路径
 * - key:与前端 formData 对象的 fieldname 相匹配(即 formData.append()方法的第一个参数)
 * - size: 设置图片最大限制,单位 kb
 */
function uploadFiles(options = {}) {
    // 1. 对参数 options 进行解构并设置默认值
    const { dir = "./public/images", key = "file", size = 1000 } = options;
    // 2. 设置 multer 的参数,配置 diskStorage,来控制文件存储的位置以及文件名字等
    const storage = multer.diskStorage({
        // 2.1 确定图片存储的位置
        destination: function (req, file, cb) {
            // 当 dir 所对应目录不存在时,则自动创建该文件
            try {
                fs.accessSync(dir);
            } catch (error) {
                fs.mkdirSync(dir);
            }
            cb(null, dir);
        },
        // 2.2 确定图片存储时的名字。(注意:如果使用原名,可能会造成再次上传同一张图片的时候的冲突)
        filename: function (req, file, cb) {
            var changedName = new Date().getTime() + parseInt(Math.random() * 100) + path.extname(file.originalname);
            // var changedName = new Date().getTime() + '-' + file.originalname;
            cb(null, changedName);
        }
    });
    // 3. 配置图片限制
    const limits = {
        // 限制文件大小 1000 kb
        fileSize: 1024 * size,
        // 限制文件数量
        files: 10
    };
    // 4.生成的专门处理上传的一个工具,可以传入 storage、limits 等配置
    const upload = multer({ storage, limits });
    // 5. 返回多文件上传的设置信息(同样可用于单文件上传)
    return upload.array(key);
}

module.exports = {
    uploadFiles
}

(3)设计一个文件上传Controller

const {uploadFiles} =require("../utils/handleFile")

class UploadFileController{

    /**
     * 文件上传
     */
    async upFile(request,response){
        //上传文件
        const uploadImage = await  uploadFiles()
        //上传结果
        uploadImage(request,response,(error)=>{
            if(error){
                response.send({code:500,msg:"上传失败"})
            }else{
                response.send({code:200,msg:"上传成功",data:request.files[0].filename})
            }
        })
    }

}

module.exports = new UploadFileController()

(4)路由

var express = require('express');
var router = express.Router();

const uploadFileController = require("../controller/UploadFileController")
/**
 * 文件上传必须是post请求
 */
router.post("/upFile",uploadFileController.upFile)

module.exports = router;

文件上传必须使用post请求

(5)在app.js中配置路由

(6)使用apifox发送请求

image-20230615183050032

图片会上传到 public ->temp目录下

二 前端访问静态资源

1 配置jwt的白名单,放行public请求

image-20230616104337392

2 在app.js中做如下配置

//指定项目中public为静态资源 ,这个文件夹里面资源前端可以直接访问
app.use('/public',express.static(path.join(__dirname, 'public')))

3 在浏览器访问

http://127.0.0.1:3001/public/images/1686883340506.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值