paint-brush
Ez duzu kode asko behar Web fitxategien kudeatzailea eraikitzekoarabera@gliimlang
Historia berria

Ez duzu kode asko behar Web fitxategien kudeatzailea eraikitzeko

arabera Gliimly7m2024/12/17
Read on Terminal Reader

Luzeegia; Irakurri

Eraiki web aplikazio erabilgarria 100 kode lerro baino gutxiagotan.
featured image - Ez duzu kode asko behar Web fitxategien kudeatzailea eraikitzeko
Gliimly HackerNoon profile picture

Fitxategiak web arakatzailean kargatzea eta deskargatzea ohiko zeregina da ia edozein web aplikazio edo zerbitzutan. Artikulu honek kodetze gutxirekin nola egin erakusten du, 100 kode lerro baino gutxiagotan. Erabilitako datu-basea PostgreSQL da, eta web zerbitzaria Nginx.

Gliimly aplikazio-zerbitzari eta programazio-lengoaia gisa erabiliko duzu. Web zerbitzariaren atzean exekutatuko da errendimendurako eta segurtasunerako, baita web funtzionalitate aberatsagoak gaitzeko ere. Modu honetan, azken erabiltzaileak ezin du zure aplikazio-zerbitzariarekin zuzenean hitz egin eskaera horiek web-zerbitzaritik pasatzen direlako, eta zure atzeko aplikazioak, berriz, zure aplikazio-zerbitzariarekin zuzenean hitz egin dezake errendimendu hobea izateko.

Orain saioa hasita dagoen Linux erabiltzailea aplikazioaren jabea izango dela suposatuz, iturburu-kodearen direktorioa sortuko du eta Gliimly aplikazioa ere sortuko du "fitxategi-kudeatzailea" izenekoa:


 mkdir filemgr cd filemgr gg -k file-manager


Ondoren, sortu "db_file_manager" izeneko PostgreSQL datu-basea, une honetan saioa hasita dagoen erabiltzailearen jabetzakoa (hau da, pasahitz gabeko konfigurazioa):

 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


Sortu datu-basearen konfigurazio fitxategia Gliimly-k erabilitako datu-basea deskribatzen duena (fitxategia "db" da):

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


Sortu zerbitzarian une honetan gordetako fitxategiak edukiko dituen SQL taula:

 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


Azkenik, sortu iturburuko Gliimly fitxategiak. Lehenik eta behin sortu "start.gliim" fitxategia eta kopiatu eta itsatsi:

 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


Sortu "list.gliim" fitxategia eta kopiatu eta itsatsi:

 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


Sortu "upload.gliim" fitxategia eta kopiatu eta itsatsi:

 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


Sortu "download.gliim" fitxategia eta kopiatu eta itsatsi:

 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


Sortu "delete.gliim" fitxategia eta kopiatu eta itsatsi:

 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


Egin aplikazioa:

 gg -q --db=postgres:db


Exekutatu zure aplikazio zerbitzaria:

 mgrg file-manager


Web zerbitzari bat Gliimly aplikazio zerbitzariaren aurrean dago, beraz, konfiguratu egin behar da. Adibide hau Ubunturako da, beraz, editatu Nginx konfigurazio fitxategia bertan:

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


Gehitu hau "zerbitzaria {}" atalean ("client_max_body_size"-k tamaina arrunteko irudiak kargatzeko aukera ematen du):

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


Berrabiarazi Nginx:

 sudo systemctl restart nginx


Joan zure web arakatzailera eta sartu:

 http://127.0.0.1/file-manager/start


Hauxe da azken emaitza. Jakina, HTML hutsa besterik ez dugu erabili, baina hori ez da kontua hemen. Frontend-eko edozein teknologia erabil dezakezu, kontua Gliimly web aplikazio/zerbitzuetarako back-end zerbitzari gisa erakustea da.

Hona hemen hasierako pantaila, fitxategi bat kargatzeko inprimakia eta liFile fitxategirako esteka batekin:

Fitxategi-kudeatzailearen hasierako orria


Fitxategiak zerrendatzea:

Zerrenda fitxategia


Fitxategi bat ezabatzeko eskatzea:

Eskatu ezabatzeko berrespena


Ezabatzearen berrespena:

Ezabatu fitxategia