Solution :
créez d'abord un dossier temporaire temporaire, stockez-le dans le dossier temporaire lorsque l'utilisateur télécharge le fichier, puis renvoyez cette URL au frontal,
- Si l'utilisateur télécharge les données du formulaire, alors les données du formulaire et l'url sont envoyées ensemble au backend, et le backend les reçoit, et juge si l'url contient /temp/, si elle le contient, déplace le fichier vers le répertoire de téléchargement , puis modifie l'url et l'enregistre dans la base de données ; si elle ne contient pas , téléchargez et mettez à jour la base de données normalement
- Si l'utilisateur ne télécharge pas les données du formulaire, le fichier n'existe que dans le répertoire temporaire et nous n'avons qu'à effacer périodiquement le répertoire temporaire
Une partie du code d'implémentation :
// 判断文件是否存在
const exists = async category_pic => await fs.promises.access(category_pic).then(() => true).catch(_ => false)
// 获取文件名
let fileName = path.basename(category_pic)
// 原文件绝对路径
let filePath = path.join(__dirname, '../uploads/temp/' + fileName)
// 目标文件绝对路径
let newFilePath = path.join(__dirname, '../uploads/categoryPic/' + fileName)
// 存入数据库的url
category_pic = config.fileServer + '/categoryPic/' + fileName
// 移动文件到上传目录
fs.rename(filePath, newFilePath, function(err){
if(err) return res.cc(err)
})