想用grails做一個檔案管理的系統

0 views
Skip to first unread message

derekypp peng

unread,
Nov 6, 2009, 7:45:06 PM11/6/09
to grail...@googlegroups.com
想用grails做一個檔案管理的系統
請問要怎麼讓只有用戶A能下載 XXX.ZIP 檔
而用戶B卻沒有辦法下載

因為我想到 我給用戶A是一個下載網址 http://www.myproject/XXX.ZIP
雖然用戶B是看不到的,可是他從別人那邊把網址COPY過來 他就可以下載了

Alex wang

unread,
Nov 6, 2009, 7:48:43 PM11/6/09
to grail...@googlegroups.com
首先将你的下载文件不要放到一个普通目录里,最好的方式是放到非web目录里,然后所有的下载行为通过定义一个

def download = {
  //permission check 
  //your download code with IO process from your private file directory
}

当然,如果文件较小,也可以放到数据库里,这样操作更方便一点。


2009/11/7 derekypp peng <dere...@gmail.com>

derekypp peng

unread,
Nov 6, 2009, 7:51:41 PM11/6/09
to grail...@googlegroups.com
Alex的意思是說在
def download = {
  //permission check  --> 這裡用session 來判斷User 有沒有登入 並且是不是有權限的User 者  
}

可是為什麼要放在非web的目錄裡?



2009/11/7 Alex wang <idea...@gmail.com>

Alex wang

unread,
Nov 6, 2009, 7:53:38 PM11/6/09
to grail...@googlegroups.com
首先IO读取文件,文件无论放在哪里都能读取
第二,放到非web目录,终端客户就无法看到了,也就安全了.

当然了,这样做也是有代价的,就是性能会有所损失,可以考虑放到缓存里。


2009/11/7 derekypp peng <dere...@gmail.com>

derekypp peng

unread,
Nov 6, 2009, 7:57:27 PM11/6/09
to grail...@googlegroups.com
首先IO读取文件,文件无论放在哪里都能读取  ---> 能不能給段代碼參考一下
因為我不知道怎麼從c:\xxx.zip  轉換成 http:/myproject/zip 這樣作法
謝謝。



2009/11/7 Alex wang <idea...@gmail.com>

Alex wang

unread,
Nov 6, 2009, 8:02:34 PM11/6/09
to grail...@googlegroups.com
def download(address)
{
    def file = new FileOutputStream(address.tokenize("/")[-1])
    def out = new BufferedOutputStream(file)
    out << new URL(address).openStream()
    out.close()
}
这个是下载网页地址的,你修改一下就应该能用了,groovy做IO操作超简洁。


2009/11/7 derekypp peng <dere...@gmail.com>

wang xin

unread,
Nov 6, 2009, 11:34:18 PM11/6/09
to grail...@googlegroups.com
为什么不是filter呢?所有*.zip都经过一个判断用户权限的filter,如果有权限,就继续,没有权限,就转错误页面。

2009/11/7 Alex wang <idea...@gmail.com>



--
Xin Wang
xinw...@gmail.com

Alex wang

unread,
Nov 7, 2009, 9:54:59 PM11/7/09
to grail...@googlegroups.com
这个方式也可行 :)


2009/11/7 wang xin <xinw...@gmail.com>
Reply all
Reply to author
Forward
0 new messages