我一直在尝试删除嵌套目录中的特定文件。
import Express from 'express';
import { baseURL } from '..';
import fs from 'fs';
import path from 'path';
import { GuestFile } from '../models/guest-file';
export const GuestDelete = async (request: Express.Request, response: Express.Response) => {
const { identifier } = request.params;
const find_file = await GuestFile.findOne({ identifier });
if (!find_file) {
return response.status(404).json({ error: 'File not found', success: false });
}
const local_file_path = find_file.file_url?.split(`${baseURL}`).pop();
const file_name = local_file_path?.split('/')?.splice(-1)[0];
// Here is where the problem is *********
fs.readdirSync(path.join(__dirname + `/uploads/${find_file.type}s/`)).find((file) => console.log(file));
console.log('file_name', file_name);
response.status(204).json({ success: true, identifier });
};
// deleteFileAfterDelay();
'
因此,我首先尝试从数据库中删除该文件,然后从本地上载中删除它,如图所示,uploads文件夹有一个子目录。我希望能够Map子目录中的所有文件,如果file_name
与file
匹配,则I fs.unlinkSyn
,但不断出现错误。最后路径为C:\\Users\\essel_r\\Desktop\\everfile\\backend_api\\\src\\controllers\\uploads\\images\\
目录如下所示:Image of the directory structure
我尝试使用fs.unlinkSyn()
,但无法正常工作:fs.readdirSync('/uploads/${find_file.type}/').find((file) => file === file_name && fs.unlinkSync(file_name));
我还尝试使用fs.access()
来检查文件是否存在,但也不起作用。
2条答案
按热度按时间wgx48brx1#
我尝试运行您的代码。我更改了'import fs from 'fs' =〉'const fs = require('fs ')'和'import path from 'path' =〉'const path = require('path ')'
而且在我的情况下,效果很好。
wpx232ag2#
在昨晚和今天早上尝试了很多之后,这就是我是如何做到的,所以我会很好地解释它。
src、****上载、和images是我的文件夹结构中的嵌套目录。
代码:
**解释:我们首先读取所需文件的目录,然后如果遇到错误,当我们抛出错误时,或者我们得到文件,这是一个数组,我们抓取每个文件,然后将目录加入文件,所以我们得到类似“
C:\Users\..\Desktop\..\..\src\uploads\images\1676410030129-screen.webp
“的东西,然后我们使用fs.stat
检查文件的路径是否存在,如果文件不存在,我们抛出错误,或者我们也检查实际文件的路径是否是stat.isDirectory()
目录,如果是真,我们console.log('The file is actually a directory)
,如果是假,然后我们转到代码的下一行,检查文件是否是C:\User\..\1676410030129-screen.webp
严格等于file_to_delete
**然后我们删除文件,否则我们抛出另一个错误。**完整代码:**index.ts
了解更多Info