You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

图库API开发:如何为复制的图片名称自动添加递增序号后缀

自动添加拷贝图片递增序号实现方案

核心实现逻辑

  • 拆分原始文件名:通过正则提取基础名称和已有的序号,避免出现image(1)(1)这类嵌套序号的问题
  • 统计同基础名的拷贝数量:查询数据库中所有符合「基础名(数字)」格式的图片记录,取最大序号加1作为新拷贝的序号
  • 拼接生成新文件名:按照要求的格式拼接基础名和新序号

修改后的完整代码

'use strict'
let imageObject= require('../models/image-object');
let fs=require('fs');
let path= require('path');

let gallery_controllers={
    copyImage:function(req,res){         
        // 获取待复制图片的ID参数
        let imageId=req.params.id;
        if(imageId==null) return res.status(404).send({message:"未定义ID"});

        // 从数据库查询待复制的图片记录
        imageObject.findById(imageId,(err,image)=>{
            if(err) return res.status(500).send({message:'数据请求失败'});
            if(!image) return res.status(404).send({message:'未找到对应图片'});

            if(image){
                // 1. 拆分原始文件名,提取基础名和已有序号
                const nameReg = /^(.*?)(?:\((\d+)\))?$/
                const matchResult = image.name.match(nameReg)
                const baseName = matchResult[1].trim()

                // 2. 查询所有同基础名的拷贝图片,计算最大序号
                imageObject.find({ name: new RegExp(`^${baseName}\\(\\d+\\)$`) }, (err, sameNameImages) => {
                    if(err) return res.status(500).send({message:'查询同名图片失败'});

                    let maxNum = 0
                    sameNameImages.forEach(img => {
                        const num = parseInt(img.name.match(/\((\d+)\)$/)[1])
                        if (num > maxNum) maxNum = num
                    })
                    const newNum = maxNum + 1
                    const newName = `${baseName}(${newNum})`

                    // 3. 初始化拷贝对象,赋值新名称
                    let imageCopied= new imageObject();
                    imageCopied.name = newName;
                    imageCopied.image = image.image;

                    // 保存拷贝后的图片到数据库
                    imageCopied.save((err,image_copied)=>{
                        if(err) return res.status(500).send({message:"服务器错误"});
                        if(!image_copied) return res.status(404).send({message:"资源不存在"});

                        return res.status(200).send({
                            image:image_copied
                        })
                    })
                })
            }
        })
    },
}

可选优化(兼容带后缀的文件名)

如果你的图片名称带有后缀(比如image.jpg),只需要把拆分文件名的正则修改为以下格式即可,会自动保留后缀:

const nameReg = /^(.*?)(?:\((\d+)\))?(\.[^.]+)?$/
const matchResult = image.name.match(nameReg)
const baseName = matchResult[1].trim()
const suffix = matchResult[3] || ''
// 拼接新名称时加上后缀
const newName = `${baseName}(${newNum})${suffix}`

内容的提问来源于stack exchange,提问作者jorge_zerpa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:24:03