2011-11-02 97 views
1

我是新來的web2py,我不得不寫一個文件上傳腳本。web2py查看錯誤

現在搜索槽互聯網絡我發現了一個腳本,它那種地方工作對我CMP 把它給服務器後,我收到無效的視圖(uploda_zipa/upload_file.html)

的代碼是:

import datetime 



    timestamp = datetime.datetime.today() 
       db.define_table('files', 
       Field('title', 'string'), 
       Field('uploaded_data', 'upload'), 
       Field('created_on','datetime',default=timestamp)) 

    db.files.title.requires = IS_NOT_EMPTY()     
    db.files.uploaded_data.requires = IS_NOT_EMPTY() 
    #Now, lets add an action the our controller 

    def upload_file(): 
    url = "" 

    form = SQLFORM(db.files, showid=False) 
    if form.accepts(request.vars, session): 
     response.flash = T('File uploaded successfully!') 
     url = URL(r=request, f="download", 
      args = db(db.files.title == request.vars.title).select(orderby=~db.files.created_on)[0].uploaded_data) 

    return dict(form=form, cknum=request.vars.CKEditorFuncNum, url=url) 

我也想知道如何設置文件夾上傳文件的路徑或者是默認的方式。該計劃是水木清華就像一個文件被上傳到特定的文件夾,並比它得到由不同的腳本處理

謝謝

回答

2

如果你沒有一個「upload_file.html」視圖定義的web2py將回落使用'generic.html'視圖。但是,默認情況下,通用視圖僅在本地主機上啓用,因此可能解釋了爲什麼它可以在本地計算機上運行,​​但不會在上載到服務器後運行。出於安全原因,建議您不要啓用生產通用視圖,或者至少您明智地這樣做。有關更多詳細信息,請參見here

至於上傳文件夾,則默認爲/ yourapp /上傳,但你可以如下更改:

import os 
db.define_table('files', 
    Field('uploaded_data', 'upload', 
     uploadfolder=os.path.join(request.folder, 'path', 'to', 'uploads'))) 

uploadfolder的解釋中的arguments to Field()列表。

+0

似乎web2py總是創建一個表來跟蹤文件。 是否有可能不創建此表,第二我希望該文件具有其原始名稱。現在我用它做了os.rename 還有其他方法嗎? – Yebach

+0

web2py不會創建表來跟蹤文件 - 您創建表並向其添加上傳字段。您可以使用SQLFORM.factory上傳沒有數據庫表的文件。由於安全原因,該文件被重命名,儘管原文件名在新文件名的一部分內被b16編碼,所以它可以被解碼(內置下載機制自動執行此操作)。 – Anthony

+0

如果你想覆蓋自動命名(這確實存在安全風險),你可以跳過表單驗證(它處理文件保存)並自己處理文件上傳(request.vars.field是一個cgi.FieldStorage對象 - - 文件對象位於request.vars.field.file中)。 – Anthony