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&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:
Fitxategiak zerrendatzea:
Fitxategi bat ezabatzeko eskatzea:
Ezabatzearen berrespena: