File manager developed with AngularJS and Bootstrap by Jonas Sciangula Street
- Multilanguage (English / Spanish / Portuguese)
- Multiple templates (List / Icons)
- Multiple file upload
- Search files
- Directory tree navigation
- Copy (Interactive UX)
- Move (Interactive UX)
- Rename
- Delete
- Edit
- Preview
- Download
- Multiple file selector (nice to have)
- Unix chmod permissions
- Backend controllers (PHP, Python, NodeJS, .Net, etc)
URL: $config.listUrl
Method: POST
{
"params": {
"mode": "list",
"onlyFolders": false,
"path": "/public_html"
}
}
{
"result": [
{
"name": "joomla",
"rights": "drwxr-xr-x",
"size": "4096",
"time": "16:07",
"type": "dir"
},
{
"name": "magento",
"rights": "drwxr-xr-x",
"size": "4096",
"time": "17:42",
"type": "dir"
},
{
"name": ".htaccess",
"rights": "-rw-r--r--",
"size": "0",
"time": "17:42",
"type": "file"
},
{
"name": "index.php",
"rights": "-rw-r--r--",
"size": "0",
"time": "17:41",
"type": "file"
}
]
}
URL: $config.renameUrl
Method: POST
{
"params": {
"mode": "rename",
"path": "/public_html/index.php",
"newPath": "/public_html/index2.php"
}
}
{
"result": {
"success": true,
"error": null
}
}
URL: $config.copyUrl
Method: POST
{
"params": {
"mode": "copy",
"path": "/public_html/index.php",
"newPath": "/public_html/index-copy.php"
}
}
{
"result": {
"success": true,
"error": null
}
}
URL: $config.removeUrl
Method: POST
{
"params": {
"mode": "delete",
"path": "/public_html/index.php",
}
}
{
"result": {
"success": true,
"error": null
}
}
URL: $config.removeUrl
Method: POST
{
"params": {
"mode": "edit",
"content": "<?php echo random(); ?>",
"path": "/public_html/index.php",
}
}
{
"result": {
"success": true,
"error": null
}
}
URL: $config.getContentUrl
Method: POST
{
"params": {
"mode": "editfile",
"path": "/public_html/index.php",
}
}
{
"result": "<?php echo random(); ?>",
}
URL: $config.createFolderUrl
Method: POST
{
"params": {
"mode": "addfolder",
"name": "new-folder",
"path": "/public_html"
}
}
{
"result": {
"success": true,
"error": null
}
}
URL: $config.compressUrl
Method: POST
{
"params": {
"mode": "compress",
"path": "/public_html/compressed.zip",
"destination": "/public_html/backups"
}
}
{
"result": {
"success": true,
"error": null
}
}
URL: $config.extractUrl
Method: POST
{
"params": {
"mode": "extract",
"destination": "/public_html/extracted-files",
"path": "/public_html/compressed.zip",
"sourceFile": "/public_html/compressed.zip"
}
}
{
"result": {
"success": true,
"error": null
}
}
URL: $config.uploadUrl
Method: POST
Content-Type: multipart/form-data
Unlimited file upload, each item will be enumerated as file-1, file-2, etc.
[$config.uploadUrl]?destination=/public_html/image.jpg&file-1={..}&file-2={...}
{
"result": {
"success": true,
"error": null
}
}
URL: $config.downloadFileUrl
Method: GET
[$config.downloadFileUrl]?mode=download&preview=true&path=/public_html/image.jpg
-File content
Every backend errors should be with an Error 500 HTTP code.
Btw, you can report errors with a 200 response with this json structure
{
"result": {
"success": false,
"error": "Access denied to remove file"
}
}