11using KendoUI . FileManager . BlobStorage . Models ;
2- using KendoUI . FileManager . BlobStorage . Helpers ;
32using Microsoft . AspNetCore . Mvc ;
43using KendoUI . FileManager . BlobStorage . Services ;
54using System . Diagnostics ;
5+ using System . Text . Json ;
66
77namespace KendoUI . FileManager . BlobStorage . Controllers
88{
@@ -47,11 +47,12 @@ public IActionResult Error()
4747
4848 // Handles reading files and folders from Azure Blob Storage for the FileManager
4949 [ HttpPost ]
50- public async Task < IActionResult > FileManager_Read ( [ FromForm ] string target )
50+ public async Task < IActionResult > FileManager_Read ( [ FromForm ] FileManagerReadRequest request )
5151 {
5252 try
5353 {
5454 // Retrieve the list of blobs/folders from the specified path
55+ var target = NormalizePath ( request . Target ?? request . Path ?? string . Empty ) ;
5556 var files = await _fileManagerService . ReadAsync ( target ) ;
5657 return Json ( files ) ;
5758 }
@@ -64,12 +65,25 @@ public async Task<IActionResult> FileManager_Read([FromForm] string target)
6465
6566 // Handles creating new folders or copying/pasting files in Azure Blob Storage
6667 [ HttpPost ]
67- public async Task < IActionResult > FileManager_Create ( [ FromForm ] string target , [ FromForm ] string name , [ FromForm ] int entry )
68+ public async Task < IActionResult > FileManager_Create ( [ FromForm ] FileManagerCreateRequest request )
6869 {
6970 try
7071 {
72+ var target = NormalizePath ( request . Target ??
73+ request . Path ??
74+ request . Source ??
75+ request . SourcePath ??
76+ string . Empty ) ;
77+ var name = request . Name ? . Trim ( ) ;
78+ var entry = request . Entry ;
79+
80+ if ( string . IsNullOrWhiteSpace ( name ) )
81+ {
82+ return BadRequest ( new { error = "Name is required for create operation" } ) ;
83+ }
84+
7185 // Parse the form data to determine if this is a folder creation, file upload, or copy operation
72- var context = FileManagerCreateContext . FromForm ( Request . Form ) ;
86+ var context = FileManagerCreateContext . FromRequest ( request ) ;
7387 var result = await _fileManagerService . CreateAsync ( target , name , entry , context ) ;
7488 return Json ( result ) ;
7589 }
@@ -82,12 +96,12 @@ public async Task<IActionResult> FileManager_Create([FromForm] string target, [F
8296
8397 // Handles renaming files or folders in Azure Blob Storage
8498 [ HttpPost ]
85- public async Task < IActionResult > FileManager_Update ( )
99+ public async Task < IActionResult > FileManager_Update ( [ FromForm ] FileManagerUpdateRequest request )
86100 {
87101 try
88102 {
89- var targetPath = Request . Form [ "path" ] ;
90- var newName = Request . Form [ "name" ] ;
103+ var targetPath = request . Path ;
104+ var newName = request . Name ;
91105
92106 if ( string . IsNullOrEmpty ( targetPath ) || string . IsNullOrEmpty ( newName ) )
93107 {
@@ -107,16 +121,15 @@ public async Task<IActionResult> FileManager_Update()
107121
108122 // Handles deleting files or folders from Azure Blob Storage
109123 [ HttpPost ]
110- public async Task < IActionResult > FileManager_Destroy ( [ FromForm ] string models )
124+ public async Task < IActionResult > FileManager_Destroy ( [ FromForm ] FileManagerDestroyRequest request )
111125 {
112126 try
113127 {
114128 // Parse the request to extract the path of the item to delete
115- var targetPath = FileManagerRequestParser . ResolveTargetPath ( Request . Form , models ) ;
129+ var targetPath = ResolveTargetPath ( request ) ;
116130 if ( string . IsNullOrEmpty ( targetPath ) )
117131 {
118- var formData = string . Join ( ", " , Request . Form . Select ( kvp => $ "{ kvp . Key } ={ kvp . Value } ") ) ;
119- return BadRequest ( new { error = "No target path provided for deletion. Received: " + formData } ) ;
132+ return BadRequest ( new { error = "No target path provided for deletion." } ) ;
120133 }
121134
122135 await _fileManagerService . DeleteAsync ( targetPath ) ;
@@ -131,18 +144,18 @@ public async Task<IActionResult> FileManager_Destroy([FromForm] string models)
131144
132145 // Handles file uploads to Azure Blob Storage
133146 [ HttpPost ]
134- public async Task < IActionResult > FileManager_Upload ( [ FromForm ] string target , IFormFile file )
147+ public async Task < IActionResult > FileManager_Upload ( [ FromForm ] FileManagerUploadRequest request )
135148 {
136149 try
137150 {
138- if ( file == null || file . Length == 0 )
151+ if ( request . File == null || request . File . Length == 0 )
139152 {
140153 return BadRequest ( new { error = "No file uploaded" } ) ;
141154 }
142155
143156 // Normalize the target path and upload the file to the blob container
144- var resolvedTarget = NormalizeUploadTarget ( target ) ;
145- var result = await _fileManagerService . UploadAsync ( resolvedTarget , file ) ;
157+ var resolvedTarget = NormalizeUploadTarget ( request ) ;
158+ var result = await _fileManagerService . UploadAsync ( resolvedTarget , request . File ) ;
146159 return Json ( result ) ;
147160 }
148161 catch ( Exception ex )
@@ -152,16 +165,54 @@ public async Task<IActionResult> FileManager_Upload([FromForm] string target, IF
152165 }
153166 }
154167
155- private string NormalizeUploadTarget ( string ? target )
168+ private static string NormalizePath ( string ? target )
169+ {
170+ if ( string . IsNullOrWhiteSpace ( target ) )
171+ {
172+ return string . Empty ;
173+ }
174+
175+ return target . Trim ( '/' ) ;
176+ }
177+
178+ private static string NormalizeUploadTarget ( FileManagerUploadRequest request )
156179 {
157- var resolvedTarget = target ??
158- Request . Form [ "target" ] . FirstOrDefault ( ) ??
159- Request . Form [ "path" ] . FirstOrDefault ( ) ??
160- string . Empty ;
161-
162- return string . IsNullOrEmpty ( resolvedTarget )
163- ? string . Empty
164- : resolvedTarget . Trim ( '/' ) ;
180+ var resolvedTarget = request . Target ?? request . Path ?? string . Empty ;
181+ return NormalizePath ( resolvedTarget ) ;
182+ }
183+
184+ private static string ? ResolveTargetPath ( FileManagerDestroyRequest request )
185+ {
186+ var targetPath = request . Path ?? request . Target ?? request . Name ;
187+
188+ if ( ! string . IsNullOrWhiteSpace ( targetPath ) )
189+ {
190+ return targetPath ;
191+ }
192+
193+ if ( string . IsNullOrWhiteSpace ( request . Models ) )
194+ {
195+ return null ;
196+ }
197+
198+ try
199+ {
200+ var modelsArray = JsonSerializer . Deserialize < JsonElement [ ] > ( request . Models ) ;
201+ if ( modelsArray is { Length : > 0 } )
202+ {
203+ var firstModel = modelsArray [ 0 ] ;
204+ if ( firstModel . TryGetProperty ( "path" , out var pathElement ) )
205+ {
206+ return pathElement . GetString ( ) ;
207+ }
208+ }
209+ }
210+ catch
211+ {
212+ // Swallow JSON parsing errors and fall back to form values
213+ }
214+
215+ return null ;
165216 }
166217 }
167218}
0 commit comments