iThome online | iThome Blog | iThome周刊訂閱

載入中...

twtw

IT邦初學者
9級

[RoR] 適單位內外用暫存空間的規畫

如果架一個沒有太多限制的上傳下載的網頁空間,那麼全世界就會拿來作暫存的空間來供互傳。避免這樣的問題,最簡單的方案是利用 web server 的設定及簡單的 script ,可符合部份需要。以這個經驗基礎,來規畫如何以 RoR 來改寫所需的功能。



收到書籤:發佈到twitter      
分享時間:2008-09-26 05:05:42

▼ ADVERTISEMENT ▼

分享內容(
8

需求源起
早期 mail server 的每封信最大容量限制,普遍是 1~2 MB左右,夾帶檔案一大就寄不出,所以會有網頁暫存空間的需求,那時候還沒有像 rapidshare 那樣的快而大容量的網站;而印象中最早所知道可以上傳大檔案到 http://www.yousendit.com/,然後 mail 給對方該檔的下傳網址,這種網站還不普及時,以一開始就用http://www.clearlight.com/pub/upload/file-upload.cgi這個 script 來作為單位內外上傳用;然而在沒區分單位內外是否可上傳下載的限制時,網站就流量大增,反而都不是自己單位內來上傳或下載用,而從 http referer 來看,變成許多其他討論區的貼圖圖床或檔案分享空間的所在。

上傳下載的原則
當時並想不到可以有像 rapidshare 這樣偉大網站的概念,只想趕快做限制,然後透過 apache 設定限制允許的範圍存取目錄來畫分三個目錄區,分別是:
1.單位內上傳,只可單位內下載
2.單位內上傳,可讓全世界下載
3.全世界可上傳,但只能給單位內下載

下載區及放 cgi 的所在,就用 apache 的設定來限制 ip 的存取範圍:

<Directory "/home/ironman/htdocs/COMPANYonly">
Options Indexes FollowSymLinks MultiViews
AuthUserFile .htaccess
AllowOverride All
Order deny,allow
Deny from all
Allow from 192.168.xxx
</Directory>

而 script 方面也是放在兩個目錄,供單位用的目錄也設成只有內部可存取。

修改 script 檔
但原始的上傳位置是固定的,就試著讓每天上傳在該日的目錄,這樣要刪舊檔就只要把某日期的子目錄刪除就可以了。以下是根據上述的 script 所增加的一些設定
...
BEGIN {
$directory = `date \+\%Y\%m\%d`;
chomp $directory ;
$today = "$directory";
use CGI qw(:standard);
$query = new CGI;

$whichdir = $query->param('target');
if ($whichdir =~ m/orgonly/ ) {
	$realdirectory = "/home/改這裡/htdocs/orgonly/$directory";
	} else {
	$realdirectory = "/home/改這裡/htdocs/2world/$directory";
	}

if (!(-e $realdirectory))
{
mkdir ("$realdirectory",0755) || die "Couldn't make $realdirectory directory\n";
$readmefile = "/home/改這裡/htdocs/orgonly/README.html";
open(RF,"$readmefile");
@readme=<RF>;
close(RF);
open(RM,">$realdirectory/README.html");
print RM @readme;
close(RM);
}
#	$SAVE_DIRECTORY = "/home/ftp/upload";
...

這樣就可以把每天的檔案,上傳到當日的目錄中;將整個修改過的檔案放在http://upload.singernew.org/dl/up_cgi.txt可下載放在cgi的目錄使用,而可以用http://upload.singernew.org/dl/HEADER_html.txt放在 apache 的目錄中,並有啟用 autoindex 的功能,就會將這 HEADER.html 秀在最上面,而這 HEADER.html 就有了上傳的表單,以及選擇要上傳給只有單位下載或者是給全世界下載的選項。


用 RoR 改寫的目標
這樣的 script 也用了好幾年,隨時在外地剛好有東西要存起來,就敲個網址,就上傳上來,如果信任內部環境的話,丟到內部裡也不怕外面看,而且也不用在外地要在別人的電腦上敲自己的帳號密碼,來進入自己的信箱而再傳;這是快速及安全的考量而言。若有檔案存在隨身碟怕掛掉的話,放在自己可存取的網址,也是個好的備援方式。

所以這上傳下載的機制,除了具有上述舊 script 的功能外,可以不需帳號密碼的限制就可上傳,而上傳者又可為其檔案設定密碼,而這有這密碼才可以下載該檔案,以及下載之後去刪除該檔案。

換句話說,單位內可下載全部檔案,除了有設密碼之外;而上傳的檔案可設或不設密碼,也可選擇是否給外界下載。而單位外,只能下載單位內部丟出來的檔案,不管要不要密碼;而上傳的檔案可設或不設密碼,而且只有單位內可下載。

接下來將利用第11日的基礎,以及結合第3日的資料庫操作的運用來建置這供單位內外用的暫存系統。

[RoR] 適單位內外用暫存空間的規畫

目前沒有資料

回應

請填寫您的回應,長度限為1,000個字,回應不計點數,也不限使用次數



 

檢舉違規

違規事項:

*補充檢舉理由(可省略),字數不可超過100字

推薦

推薦理由:


*給回答者的鼓勵(可不填),字數不可超過100字

▼ ADVERTISEMENT ▼

熱門標籤

 cisco   crystal   exchange   it   java   javascript   linux   m-power   mail   microsoft   msnlib   msnp15   msnsdk   msn機器人   mysql   nas   oracle   outlook   pmi   pmp   raid   report   sap   server   smartquery   sql   vista   windows   xp   倍力   倍力資訊   免費軟體   國際專案管理師   報表   專案管理   微軟   有話大聲說   活動   省錢   網路   網路儲存   網路管理   網頁安全   網頁設計   資安   資料庫   資訊安全   防毒軟體   2003   2008