paint-brush
Веб файл менеджерин куруу үчүн сизге көп коддун кереги жоктарабынан@gliimlang
Жаңы тарых

Веб файл менеджерин куруу үчүн сизге көп коддун кереги жок

тарабынан Gliimly7m2024/12/17
Read on Terminal Reader

өтө узун; Окуу

Коддун 100дөн аз саптарында пайдалуу веб тиркемесин түзүңүз.
featured image - Веб файл менеджерин куруу үчүн сизге көп коддун кереги жок
Gliimly HackerNoon profile picture

Веб браузерге файлдарды жүктөө жана жүктөө дээрлик бардык веб-тиркемелерде же кызматтарда жалпы милдет. Бул макалада муну өтө аз коддоо менен кантип жасоо керектиги көрсөтүлөт - коддун 100дөн аз саптарында. Колдонулган маалымат базасы PostgreSQL, ал эми веб-сервер Nginx.

Сиз Gliimlyди колдонмо сервери жана программалоо тили катары колдоносуз. Ал иштөө жана коопсуздук үчүн, ошондой эле бай веб-функцияларды иштетүү үчүн веб-сервердин артында иштейт. Ошентип, акыркы колдонуучу сиздин тиркеме сервериңиз менен түз сүйлөшө албайт, анткени мындай суроо-талаптардын баары веб-сервер аркылуу өтөт, ал эми арткы тиркемеңиз жакшыраак иштеши үчүн тиркеме сервериңиз менен түз сүйлөшө алат.

Сиздин учурда кирген Linux колдонуучуңуз тиркемеге ээ болот деп ойлосоңуз, баштапкы код каталогун түзүп, ошондой эле "файл-менеджер" деп аталган Gliimly тиркемесин түзөт:


 mkdir filemgr cd filemgr gg -k file-manager


Андан кийин, учурда кирген колдонуучуга таандык "db_file_manager" деп аталган PostgreSQL маалымат базасын түзүңүз (б.а. сырсөзсүз орнотуу):

 echo "create user $(whoami); create database db_file_manager with owner=$(whoami); grant all on database db_file_manager to $(whoami); \q" | sudo -u postgres psql


Gliimly тарабынан колдонулган маалымат базасынын конфигурация файлын түзүңүз, ал маалымат базасын сүрөттөйт (бул "db" файлы):

 echo "user=$(whoami) dbname=db_file_manager" > db


Учурда серверде сакталган файлдарды камтыган SQL таблицасын түзүңүз:

 echo "create table if not exists files (fileName varchar(100), localPath varchar(300), extension varchar(10), description varchar(200), fileSize int, fileID bigserial primary key);" | psql -d db_file_manager


Акырында, Gliimly булак файлдарын түзүңүз. Алгач "start.gliim" файлын түзүп, көчүрүп, чаптаңыз:

 begin-handler /start public @<h2>File Manager</h2> @To manage the uploaded files, <a href="<<p-path "/list">>">click here.</a><br/> @<br/> @<form action="<<p-path "/upload">>" method="POST" enctype="multipart/form-data"> @ <label for="file_description">File description:</label><br> @ <textarea name="filedesc" rows="3" columns="50"></textarea><br/> @ <br/> @ <label for="filename">File:</label> @ <input type="file" name="file" value=""><br><br> @ <input type="submit" value="Submit"> @</form> end-handler


"list.gliim" файлын түзүп, көчүрүп, чаптаңыз:

 begin-handler /list public @<h2>List of files</h2> @To add a file, <a href="<<p-path "/start">>">click here</a><br/><br/> @<table border="1"> @<tr> @ <td>File</td><td>Description</td><td>Size</td><td>Show</td><td>Delete</td> @</tr> run-query @db= \ "select fileName, description, fileSize, fileID from files order by fileSize desc" \ output file_name, description noencode, file_size, file_ID @<tr> @ <td><<p-web file_name>></td><td><<p-web description>><td><<p-web file_size>></td> @ <td><a href="<<p-path "/download">>/file_id=<<p-url file_ID>>">Show</a></td> @ <td><a href="<<p-path "/delete">>/action=confirm/file_id=<<p-url file_ID>>">Delete</a></td> @</tr> end-query @</table> end-handler


"upload.gliim" файлын түзүп, көчүрүп жана чаптаңыз:

 begin-handler /upload public get-param filedesc // file description from the upload form get-param file_filename // file name get-param file_location // the path to uploaded file get-param file_size // size in bytes get-param file_ext // the file extension @<h2>Uploading file</h2> run-query @db= \ "insert into files (fileName, localPath, extension, description, fileSize) \ values ('%s', '%s', '%s', '%s', '%s')" \ input file_filename, file_location, file_ext, filedesc, file_size end-query @File <<p-web file_filename>> of size <<p-web file_size>> \ is stored on server at <<p-web file_location>>. \ File description is <<p-web filedesc>>.<hr/> end-handler


"download.gliim" файлын түзүп, көчүрүп жана чаптаңыз:

 begin-handler /download public get-param file_id run-query @db= \ "select localPath,extension from files where fileID='%s'" \ input file_id \ output local_path, ext \ row-count num_files if-true ext equal ".jpg" send-file local_path headers content-type "image/jpg" else-if ext equal ".pdf" send-file local_path headers content-type "application/pdf" else-if send-file local_path headers content-type "application/octet-stream" download end-if end-query if-true num_files not-equal 1 @Cannot find this file!<hr/> exit-handler end-if end-handler


"delete.gliim" файлын түзүп, көчүрүп, чаптаңыз:

 begin-handler /delete public @<h2>Delete a file</h2> get-param action get-param file_id run-query @db="select fileName, localPath, description from files where fileID='%s'" output file_name, local_path, desc input file_id if-true action equal "confirm" // get file information to confirm what will be deleted @Are you sure you want to delete file <<p-web file_name>> (<<p-web desc>>)? Click <a href="<<p-path "/delete">>?action=delete&amp;file_id=<<p-url file_id>>">Delete</a> or click the browser's Back button to go back.<br/> else-if action equal "delete" // actual delete file, once confirmed begin-transaction @db run-query @db= "delete from files where fileID='%s'" input file_id error err no-loop if-true err not-equal "0" @Could not delete the file (error <<p-web err>>) rollback-transaction @db else-if delete-file local_path status st if-true st equal GG_OKAY commit-transaction @db @File deleted. Go back to <a href="<<p-path "/start">>">start page</a> else-if rollback-transaction @db @File could not be deleted, error <<p-num st>> end-if end-if else-if @Unrecognized action <<p-web action>> end-if end-query end-handler


Өтүнмө түзүү:

 gg -q --db=postgres:db


Колдонмо сервериңизди иштетиңиз:

 mgrg file-manager


Веб сервер Gliimly тиркеме серверинин алдында отурат, андыктан аны орнотуу керек. Бул мисал Ubuntu үчүн, андыктан Nginx конфигурация файлын ошол жерден түзөтүңүз:

 sudo vi /etc/nginx/sites-enabled/default


Муну "сервер {}" бөлүмүнө кошуңуз ("client_max_body_size" типтүү өлчөмдөгү сүрөттөрдү жүктөп берүүгө мүмкүндүк берет):

 location /file-manager/ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:///var/lib/gg/file-manager/sock/sock; } client_max_body_size 100M;


Nginxти кайра иштетүү:

 sudo systemctl restart nginx


Веб браузериңизге өтүп, төмөнкүнү киргизиңиз:

 http://127.0.0.1/file-manager/start


Бул акыркы натыйжа болуп саналат. Албетте, биз жөн гана жылаңач HTML колдондук, бирок бул жерде эч нерсе эмес. Сиз алдыңкы технологиянын каалаган түрүн колдоно аласыз, Gliimlyди веб-тиркемелер/кызматтар үчүн сервер катары көрсөтүү.

Бул жерде файлды жүктөө формасы жана liFilest файлдарына шилтемеси бар үй экраны:

Файл менеджеринин башкы бети


Листинг файлдары:

Тизме файлы


Файлды жок кылуу суралууда:

Жок кылууну ырастоону сураныңыз


Жок кылууну ырастоо:

Файлды жок кылуу