@@ -22,15 +22,14 @@ function isPathInsideRoot(fullPath) {
2222
2323 const accept = resolvedTarget . startsWith ( resolvedRoot ) ;
2424
25- console . log ( `[Защита каталога] [${ accept } ] Проверка пути: ${ resolvedTarget } в ${ resolvedRoot } ` ) ;
25+ // console.log(`[Защита каталога] [${accept}] Проверка пути: ${resolvedTarget} в ${resolvedRoot}`);
2626
2727 return accept ;
2828}
2929
3030// Получение списка файлов и папок
3131app . get ( '/api/files' , ( req , res ) => {
3232 const dirPath = path . join ( DIR_PATH , req . query . path || '/' ) ;
33- console . log ( `[Чтение каталога] Попытка получить файлы: ${ req . query . path || '/' } ` ) ;
3433 if ( ! isPathInsideRoot ( dirPath ) ) {
3534 res . status ( 400 ) . json ( { error : 'Неверный путь' } ) ;
3635 return ;
@@ -42,13 +41,13 @@ app.get('/api/files', (req, res) => {
4241 isDirectory : file . isDirectory ( )
4342 } ) ) ;
4443 res . json ( result ) ;
44+ console . log ( `Файлы получены: ${ req . query . path || '/' } ` ) ;
4545 } ) ;
4646} ) ;
4747
4848// Удаление файла или папки
4949app . delete ( '/api/files' , ( req , res ) => {
5050 const targetPath = path . join ( DIR_PATH , req . query . path || '' ) ;
51- console . log ( `[Удаление файла/каталога] Попытка удалить файл/каталог: ${ req . query . path || '' } ` ) ;
5251 if ( ! isPathInsideRoot ( targetPath ) ) {
5352 res . status ( 400 ) . json ( { error : 'Неверный путь' } ) ;
5453 return ;
@@ -59,24 +58,44 @@ app.delete('/api/files', (req, res) => {
5958 fs . rm ( targetPath , { recursive : true , force : true } , err => {
6059 if ( err ) return res . status ( 500 ) . json ( { error : 'Ошибка удаления папки' } ) ;
6160 res . json ( { message : 'Папка удалена' } ) ;
61+ console . log ( `Папка удалена: ${ req . query . path || '' } ` ) ;
6262 } ) ;
6363 } else {
6464 fs . unlink ( targetPath , err => {
6565 if ( err ) return res . status ( 500 ) . json ( { error : 'Ошибка удаления файла' } ) ;
6666 res . json ( { message : 'Файл удален' } ) ;
67+ console . log ( `Файл удален: ${ req . query . path || '' } ` ) ;
6768 } ) ;
6869 }
6970 } ) ;
7071} ) ;
7172
73+ // Переименование файла или папки
74+ app . post ( '/api/rename' , ( req , res ) => {
75+ const { path : targetPath , name } = req . body ;
76+
77+ const oldPath = path . join ( DIR_PATH , targetPath ) ;
78+ const newPath = path . join ( path . dirname ( oldPath ) , name ) ;
79+
80+ if ( ! isPathInsideRoot ( oldPath ) || ! isPathInsideRoot ( newPath ) ) {
81+ res . status ( 400 ) . json ( { error : 'Неверный путь' } ) ;
82+ return ;
83+ }
84+
85+ fs . rename ( oldPath , newPath , err => {
86+ if ( err ) return res . status ( 500 ) . json ( { error : 'Ошибка переименования' } ) ;
87+ res . json ( { message : 'Переименование успешно' } ) ;
88+
89+ console . log ( `Переименовано ${ oldPath } на ${ newPath } ` ) ;
90+ } ) ;
91+ } )
92+
7293// Создание файла или папки
7394app . post ( '/api/files' , ( req , res ) => {
7495 const { path : targetPath , type } = req . body ;
7596
7697 const fullPath = path . join ( DIR_PATH , targetPath ) ;
7798
78- console . log ( `[Создание файла/каталога] Попытка создать файл/каталог: ${ targetPath } ` ) ;
79-
8099 if ( ! isPathInsideRoot ( fullPath ) ) {
81100 res . status ( 400 ) . json ( { error : 'Неверный путь' } ) ;
82101 return ;
@@ -86,11 +105,13 @@ app.post('/api/files', (req, res) => {
86105 fs . mkdir ( fullPath , { recursive : false } , err => {
87106 if ( err ) return res . status ( 500 ) . json ( { error : 'Ошибка создания папки' } ) ;
88107 res . json ( { message : 'Папка создана' } ) ;
108+ console . log ( `Папка создана: ${ targetPath } ` ) ;
89109 } ) ;
90110 } else if ( type === 'file' ) {
91111 fs . writeFile ( fullPath , '' , err => {
92112 if ( err ) return res . status ( 500 ) . json ( { error : 'Ошибка создания файла' } ) ;
93113 res . json ( { message : 'Файл создан' } ) ;
114+ console . log ( `Файл создан: ${ targetPath } ` ) ;
94115 } ) ;
95116 } else {
96117 res . status ( 400 ) . json ( { error : 'Неверный тип. Используйте "file" или "folder".' } ) ;
@@ -105,8 +126,6 @@ app.post('/api/upload', (req, res) => {
105126 const { filename } = info ;
106127 const saveTo = path . join ( DIR_PATH , req . query . destination || '/' , filename ) ;
107128
108- console . log ( `[Получение файла] Попытка сохранить файл: ${ req . query . destination || '/' } ` ) ;
109-
110129 if ( ! isPathInsideRoot ( saveTo ) ) {
111130 return res . status ( 400 ) . json ( { error : 'Неверный путь' } ) ;
112131 }
@@ -145,7 +164,6 @@ app.post('/api/upload', (req, res) => {
145164
146165app . get ( '/api/notes' , ( req , res ) => {
147166 const filePath = path . join ( DIR_PATH , ( req . query . path || '' ) + "notes.txt" ) ;
148- console . log ( `[Получение заметок каталога] Попытка получить заметки: ${ ( req . query . path || '' ) + "notes.txt" } ` ) ;
149167 if ( ! isPathInsideRoot ( filePath ) ) {
150168 res . status ( 400 ) . json ( { error : 'Неверный путь' } ) ;
151169 return ;
@@ -154,6 +172,7 @@ app.get('/api/notes', (req, res) => {
154172 let notes = "" ;
155173 if ( fs . existsSync ( filePath ) ) {
156174 notes = fs . readFileSync ( filePath , 'utf-8' ) ;
175+ console . log ( `Заметки получены: ${ filePath } ` ) ;
157176 }
158177
159178 res . json ( { message : notes } ) ;
@@ -162,7 +181,6 @@ app.get('/api/notes', (req, res) => {
162181// Скачивание файла или папки (как zip)
163182app . get ( '/api/download' , ( req , res ) => {
164183 const filePath = path . join ( DIR_PATH , req . query . path || '' ) ;
165- console . log ( `[Скачивание файла] Попытка скачать файл: ${ req . query . path || '' } ` ) ;
166184 if ( ! isPathInsideRoot ( filePath ) ) {
167185 res . status ( 400 ) . json ( { error : 'Неверный путь' } ) ;
168186 return ;
@@ -177,12 +195,15 @@ app.get('/api/download', (req, res) => {
177195 // Скачиваем файл
178196 res . download ( filePath , err => {
179197 if ( err ) res . status ( 500 ) . json ( { error : 'Ошибка скачивания файла' } ) ;
198+ console . log ( `Файл скачан: ${ filePath } ` ) ;
180199 } ) ;
181200 } else if ( stats . isDirectory ( ) ) {
182201 // Скачиваем папку как zip
183202 const folderName = path . basename ( filePath ) ;
184203 res . setHeader ( 'Content-Type' , 'application/zip' ) ;
185- res . setHeader ( 'Content-Disposition' , `attachment; filename=${ folderName } .zip` ) ;
204+
205+ const encodedName = encodeURIComponent ( folderName + '.zip' ) ;
206+ res . setHeader ( 'Content-Disposition' , `attachment; filename="${ encodedName } .zip"; filename*=UTF-8''${ encodedName } ` ) ;
186207
187208 const archive = archiver ( 'zip' , { zlib : { level : 9 } } ) ;
188209 archive . directory ( filePath , false ) ;
@@ -191,6 +212,8 @@ app.get('/api/download', (req, res) => {
191212 archive . finalize ( ) . catch ( err => {
192213 console . error ( err ) ;
193214 res . status ( 500 ) . json ( { error : 'Ошибка архивации' } ) ;
215+ } ) . finally ( ( ) => {
216+ console . log ( `Папка скачана: ${ filePath } ` ) ;
194217 } ) ;
195218 } else {
196219 res . status ( 400 ) . json ( { error : 'Недопустимый тип' } ) ;
0 commit comments