Sunteți pe pagina 1din 6

Webhosting si Digi Storage

In articolul urmator ne propunem sa exemplificam cum poate fi folosit Digi


Storage in domeniul hostingului. Din ce in ce mai multe site-uri web trebuie sa
incorporeze fisiere audio, video dar si multe poze. Toate acestea pot ocupa foarte mult
spatiu pe serverele care asigura hostingul site-ului, mai ales daca pozele si filmele sunt
stocate la o rezolutie mare.
Digi Storage poate rezolva aceste probleme intr-un mod foarte simplu :
- Toate fisierele de dimensiuni medii si mari se pot stoca doar in Digi Storage

- Directoarele din Digi Storage care contin aceste fisiere se vor partaja printr-un
link de incarcare

- In acest fel , fiecare fisier stocat va putea fi accesat de oriunde peste HTTP printr-
un URL generat de procesul de partajare

- In codul sursa al paginilor din site-ul initial nu mai includem calea locala (de pe
server) catre poze sau filme, ci noile URL-ul generate de partajare

In acest fel, site-ul nostru este mult mai scalabil pentru ca are nevoie de un spatiu
mult mai mic pe server, avem redundanta datelor asigurata de Digi Storage (nu mai
trebuie sa facem backup permanent la poze si filme) iar traficul generat de descarcarea
fisierelor respective (full-size) se va face de catre clienti direct din Digi Storage. Site-
ul original va avea astfel mai multa banda libera , o incarcare mai mica pe resursele
hardware dar va ocupa si un spatiu foarte mic pe serverul de hosting.
Exemplul de mai jos este in scop pur demonstrativ, detaliile de implementare se
pot schimba in functie de nevoile propriu-zise ale site-ului dar ideile de mai sus ramin
valabile. Ne propunem sa aratam cum putem folosi o galerie web de imagini (dar care
poate fi foarte bine orice blog) si Digi Storage.
Initial galeria de imagini citeste si afiseaza imaginile gasite intr-un folder
'img/demopage'. Noi ne-am propus sa afisam pozele stocate in Digi Storage utilizand
un link de descarcare (download link), iar pentru a le putea afisa ne-am folosit de
urmatoarele tool-uri:
galerie lightbox http://lokeshdhakar.com/projects/lightbox2/
arhiva paginare php http://www.sitepoint.com/perfect-php-pagination/
script API https://storage.rcs-rds.ro/help/developers/example
Scriptul 'script.py' de afisare a pozelor aflate in folderul din cloud va fi apelat cu un
parametru 'x', unde 'x' reprezinta numarul paginii care se afiseaza in browser. Acest
script API returneaza cate 16 nume de fisiere imagini din cloud impreuna cu
dimensiunea array-ului (acesta ultima variabila se foloseste pentru paginare).

script.py:
#!/usr/bin/python
import requests
import json
import getpass
import sys
api_base = 'https://storage.rcs-rds.ro'
s = requests.Session()
# get auth token
token = s.get(api_base + '/token', headers = {
'X-Koofr-Email': 'email@domeniu.tld',
'X-Koofr-Password': 'parola'
}).headers['X-Koofr-Token']
s.headers['Authorization'] = 'Token ' + token
# get mount (Digi Cloud, Dropbox...)
mounts = s.get(api_base + '/api/v2/mounts').json()['mounts']
mount = [x for x in mounts if x['name'] == 'Digi Cloud'][0]
# list files
files = s.get(api_base + '/api/v2/mounts/' + mount['id'] + '/files/list', params = {'path': '/Upload'}).json()['files']
stack = []
j = int(sys.argv[1])
macs = j * 16
i = macs - 16
for file in files:
stack.append(file['name'])
if macs > len(stack):
macs = len(stack)
for x in range(i, macs):
print stack[x]

print len(stack)

Descarcati si extrageti arhivele de la inceputul articolului (arhiva paginated-
demo.zip trebuie extrasa in folderul 'lightbox' din arhiva galeriei) in rootdir-ul
serverului web, conform exemplului de mai jos:

drwxr-xr-x 6 root root 4096 May 23 17:44 .
drwxr-xr-x 8 root root 4096 May 23 12:09 ..
drwxr-xr-x 2 root root 4096 May 23 10:41 css
-rw-r--r-- 1 root root 1639 May 23 13:07 DoubleBarLayout.php
drwxr-xr-x 3 root root 4096 Mar 30 19:45 img
-rw-r--r-- 1 root root 8013 Mar 30 19:45 index.html
-rw-r--r-- 1 root root 2139 May 26 12:37 index.php
drwxr-xr-x 2 root root 4096 Mar 30 19:45 js
-rw-r--r-- 1 root root 263 Jul 29 2007 PageLayout.php
-rw-r--r-- 1 root root 3343 May 23 12:51 Paginated.php
-rw-r--r-- 1 root root 1312 Mar 30 19:45 README.markdown
-rw-r--r-- 1 root root 1549 May 23 12:59 script.py
-rw-r--r-- 1 root root 422 Jul 29 2007 TrailingLayout.php

Din fisierul index.php s-au scos liniile care erau in plus si s-a adaugat apelarea
scriptului python si paginarea php.


Index.php:
<?
require_once "Paginated.php";
require_once "DoubleBarLayout.php";
$page = $_GET['page'];
if (empty($page)) $page = 1;
else if (!is_numeric($page)) $page = 1;
?>
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title>Lightbox</title>
<meta name="description" lang="en" content="Lightbox is a script used to overlay images on the current page.
It's a snap to setup and works on all modern browsers."/>
<meta name="author" content="Lokesh Dhakar">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="img/demopage/favicon.png">
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Karla%7CMontserrat">
<link rel="stylesheet" href="css/screen.css">
<link rel="stylesheet" href="css/lightbox.css">
</head>
<body>
<center><h3>Digi Storage gallery example</h3></center>
<section id="examples" class="examples-section">
<div class="container">
<div class="image-row">
<div class="image-set">
<?php
exec('python script.py '.$page.'',$output,$ret_code);
$pics_array = array();
for($r = 0; $r < (count($output) - 1); $r++) {
array_push($pics_array,'https://storage.rcs-rds.ro/content/links/b0889fa8-e1a3-4c3e-ae39-
30e8edc86e4b/files/get/'.$output[$r].'?path=%2F'.$output[$r]);
}

$i = 0;
for($j=0; $j < count($pics_array); $j++) {
$file_parts = explode('.',$pics_array[$j]);
$ext = strtolower(array_pop($file_parts));
$title = implode('.',$file_parts);
$title = htmlspecialchars($title);
$nomargin='';
if(($i+1)%4==0) $nomargin=' nomargin';
echo '<a class="example-image-link" href="'.$pics_array[$j].'" data-lightbox="example-set" data-title="Click the
right half of the image to move forward."><img class="example-image" src="'.$pics_array[$j].'" alt=""/></a>';
$i++;
}
echo '</div>';
$count = end($output);
$pagedResults = new Paginated($count, 16, $page);
$pagedResults->setLayout(new DoubleBarLayout());
echo $pagedResults->fetchPagedNavigation();
?>
</div>
</div>
</section>
<script src="js/jquery-1.11.0.min.js"></script>
<script src="js/lightbox.js"></script>
</body>
</html>

Fisierul 'screen.css' a fost modificat pentru a permite afisarea a patru imagini putin
mai mari decat arhiva originala aranjate pe 4 randuri.
La final galeria va arata ca imaginea de mai jos:










Iar o poza full-screen arata asa :

S-ar putea să vă placă și