Итак, я делаю multer вnest.js, и меня успешно загружают в базу данных, а затем, когда я удаляю файл из базы данных, файл все еще находится на сервере внутри загрузок/изображений. Теперь я хочу удалить его с сервера после удаления из базы данных. ниже приведен мой централизованный код мультиплексора.
import {
applyDecorators,
BadRequestException,
UseInterceptors,
} from '@nestjs/common';
import { Request } from 'express';
import { diskStorage } from 'multer';
import { extname, join } from 'path';
import * as fs from 'fs';
import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express';
//Multer checks size before you know the file type. !!!
const IMAGE_EXT = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.tiff'];
const DOC_EXT = [
'.pdf',
'.doc',
'.docx',
'.xls',
'.xlsx',
'.ppt',
'.pptx',
'.txt',
'.csv',
];
const VIDEO_EXT = ['.mp4', '.mov', '.avi', '.mkv', '.webm'];
const AUDIO_EXT = ['.mp3', '.wav', '.aac', '.ogg'];
const ARCHIVE_EXT = ['.zip', '.rar', '.7z', '.tar', '.gz'];
export const ALL_EXT = [
...IMAGE_EXT,
...DOC_EXT,
...VIDEO_EXT,
...AUDIO_EXT,
...ARCHIVE_EXT,
];
const MAX_FILE_SIZE = {
image: 5 * 1024 * 1024, //5mb
document: 10 * 1024 * 1024, //10mb
video: 100 * 1024 * 1024, //100mb
audio: 20 * 1024 * 1024, //20mb
archive: 200 * 1024 * 1024, //200mb
};
export const getFileCategory = (ext: string) => {
if (IMAGE_EXT.includes(ext)) return 'image';
if (DOC_EXT.includes(ext)) return 'document';
if (VIDEO_EXT.includes(ext)) return 'video';
if (AUDIO_EXT.includes(ext)) return 'audio';
if (ARCHIVE_EXT.includes(ext)) return 'archive';
return null;
};
// whether accept or reject files globally accepted "Is this a known file type?""
const fileFilter = (
req: Request,
file: Express.Multer.File, //name,mimetype, size
callback: (error: Error | null, acceptFile: boolean) => void, //stop upload with error
) => {
const ext = extname(file.originalname).toLocaleLowerCase(); //shirt.png => .png
const category = getFileCategory(ext);
if (!category) {
return callback(
new BadRequestException(
`Invalid file type: ${ext}. Allowed: ${ALL_EXT.join(', ')}`,
),
false,
);
}
//allow upload
callback(null, true);
};
//storgae engine
const storage = diskStorage({
destination: (req: Request, file: Express.Multer.File, callback) => {
const ext = extname(file.originalname).toLocaleLowerCase();
const category = getFileCategory(ext);
if (!category) {
return callback(new Error('Invalid file category'), '');
}
//build folder path localhost:3333/uploads/category
const folder = join(process.cwd(), 'uploads', category);
try {
//Creates the folder if it doesn’t exist. src/uploads/
fs.mkdirSync(folder, { recursive: true });
//No error, and use this folder path
callback(null, folder);
} catch (error) {
callback(error as Error, folder);
}
},
//Save the file with THIS name
//1707462338123-834928374.png
//1707462338123-192837465.mp4
filename: (req: Request, file: Express.Multer.File, callback) => {
const ext = extname(file.originalname).toLowerCase();
const unique = `${Date.now()}-${Math.round(Math.random() * 1e9)}`;
callback(null, `${unique}${ext}`);
},
});
// Limits (pick largest allowed file size)
const limits = {
fileSize: Math.max(...Object.values(MAX_FILE_SIZE)),
files: 50,
};
//export decorators
export const UploadSingle = (fieldName = 'file') => {
return applyDecorators(
UseInterceptors(
FileInterceptor(fieldName, { storage, fileFilter, limits }),
),
);
};
export const UploadMultiple = (fieldName = 'files', maxCount = 10) => {
return applyDecorators(
UseInterceptors(
FilesInterceptor(fieldName, maxCount, { storage, fileFilter, limits }),
),
);
};
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-database
Функция удаления нескольких файлов с сервера при удалении из базы данных ⇐ JAVA
Программисты JAVA общаются здесь
1770787970
Anonymous
Итак, я делаю multer вnest.js, и меня успешно загружают в базу данных, а затем, когда я удаляю файл из базы данных, файл все еще находится на сервере внутри загрузок/изображений. Теперь я хочу удалить его с сервера после удаления из базы данных. ниже приведен мой централизованный код мультиплексора.
import {
applyDecorators,
BadRequestException,
UseInterceptors,
} from '@nestjs/common';
import { Request } from 'express';
import { diskStorage } from 'multer';
import { extname, join } from 'path';
import * as fs from 'fs';
import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express';
//Multer checks size before you know the file type. !!!
const IMAGE_EXT = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.bmp', '.tiff'];
const DOC_EXT = [
'.pdf',
'.doc',
'.docx',
'.xls',
'.xlsx',
'.ppt',
'.pptx',
'.txt',
'.csv',
];
const VIDEO_EXT = ['.mp4', '.mov', '.avi', '.mkv', '.webm'];
const AUDIO_EXT = ['.mp3', '.wav', '.aac', '.ogg'];
const ARCHIVE_EXT = ['.zip', '.rar', '.7z', '.tar', '.gz'];
export const ALL_EXT = [
...IMAGE_EXT,
...DOC_EXT,
...VIDEO_EXT,
...AUDIO_EXT,
...ARCHIVE_EXT,
];
const MAX_FILE_SIZE = {
image: 5 * 1024 * 1024, //5mb
document: 10 * 1024 * 1024, //10mb
video: 100 * 1024 * 1024, //100mb
audio: 20 * 1024 * 1024, //20mb
archive: 200 * 1024 * 1024, //200mb
};
export const getFileCategory = (ext: string) => {
if (IMAGE_EXT.includes(ext)) return 'image';
if (DOC_EXT.includes(ext)) return 'document';
if (VIDEO_EXT.includes(ext)) return 'video';
if (AUDIO_EXT.includes(ext)) return 'audio';
if (ARCHIVE_EXT.includes(ext)) return 'archive';
return null;
};
// whether accept or reject files globally accepted "Is this a known file type?""
const fileFilter = (
req: Request,
file: Express.Multer.File, //name,mimetype, size
callback: (error: Error | null, acceptFile: boolean) => void, //stop upload with error
) => {
const ext = extname(file.originalname).toLocaleLowerCase(); //shirt.png => .png
const category = getFileCategory(ext);
if (!category) {
return callback(
new BadRequestException(
`Invalid file type: ${ext}. Allowed: ${ALL_EXT.join(', ')}`,
),
false,
);
}
//allow upload
callback(null, true);
};
//storgae engine
const storage = diskStorage({
destination: (req: Request, file: Express.Multer.File, callback) => {
const ext = extname(file.originalname).toLocaleLowerCase();
const category = getFileCategory(ext);
if (!category) {
return callback(new Error('Invalid file category'), '');
}
//build folder path localhost:3333/uploads/category
const folder = join(process.cwd(), 'uploads', category);
try {
//Creates the folder if it doesn’t exist. src/uploads/
fs.mkdirSync(folder, { recursive: true });
//No error, and use this folder path
callback(null, folder);
} catch (error) {
callback(error as Error, folder);
}
},
//Save the file with THIS name
//1707462338123-834928374.png
//1707462338123-192837465.mp4
filename: (req: Request, file: Express.Multer.File, callback) => {
const ext = extname(file.originalname).toLowerCase();
const unique = `${Date.now()}-${Math.round(Math.random() * 1e9)}`;
callback(null, `${unique}${ext}`);
},
});
// Limits (pick largest allowed file size)
const limits = {
fileSize: Math.max(...Object.values(MAX_FILE_SIZE)),
files: 50,
};
//export decorators
export const UploadSingle = (fieldName = 'file') => {
return applyDecorators(
UseInterceptors(
FileInterceptor(fieldName, { storage, fileFilter, limits }),
),
);
};
export const UploadMultiple = (fieldName = 'files', maxCount = 10) => {
return applyDecorators(
UseInterceptors(
FilesInterceptor(fieldName, maxCount, { storage, fileFilter, limits }),
),
);
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79887131/multer-deleting-functionality-form-the-server-when-deleted-from-the-database[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия