web.py是一個python的web框架, 簡單易用強大的功能. 以python的方式來寫web.
在上傳文件上, 我一直遇到點問題, 終於解決了, 記錄在這裡. 我在網上搜了很久, 這方面的資料好少, 希望可以幫助有需要的人, web.py還是很好用的.
以上都是參考了官方文檔, 地址: http://webpy.org/cookbook/index.zh-cn
項目目錄格式
說明: upload是上傳文件的目錄(win7下測試, 圖片,文本等都正常), templates是html模板, sqlite.db是sqlite數據庫文件, demo.py是源文件. run.bat和READE.txt沒什麼好說的.
demo.py源代碼如下:
import
web
urls
=
(
'/'
,
'index'
,
'/add'
,
'add'
,
'/upload'
,
'upload'
)
class
index:
def
GET(
self
):
todos
=
db.select(
'todo'
)
return
render.index(todos)
class
add:
def
POST(
self
):
i
=
web.
input
()
n
=
db.insert(
'todo'
,
id
=
i.
id
, title
=
i.title)
raise
web.seeother(
'/'
)
class
upload:
def
POST(
self
):
x
=
web.
input
(myfile
=
{})
filedir
=
'images'
# change this to the directory you want to store the file in.
if
'myfile'
in
x:
# to check if the file-object is created
filepath
=
x.myfile.filename.replace(
'\\','
/
')
# replaces the windows-style slashes with linux ones.
filename
=
filepath.split(
'/'
)[
-
1
]
# splits the and chooses the last part (the filename with extension)
fout
=
open
(filedir
+
'/'
+
filename,
'wb'
)
# creates the file where the uploaded file should be stored
fout.write(x.myfile.
file
.read())
# writes the uploaded file to the newly created file.
# fout.write(x.myfile.value) # writes the uploaded file to the newly created file.
fout.close()
# closes the file, upload complete.
raise
web.seeother(
'/'
)
app
=
web.application(urls,
globals
())
render
=
web.template.render(
'templates/'
)
#db = web.database(dbn='sqlite', db=":memory:")
db
=
web.database(dbn
=
'sqlite'
, db
=
"sqlite.db"
)
conn
=
db._db_cursor().connection
cursor
=
conn.cursor()
cursor.execute(
'DROP TABLE todo'
)
cursor.execute(
'''
CREATE TABLE todo (
id text primary key,
title text,
created timestamp,
done boolean
)
'''
)
cursor.execute(
'''
INSERT INTO todo (id, title) VALUES ('01', 'Learn web.py')
'''
)
cursor.execute(
'''
INSERT INTO todo (id, title) VALUES ('02', 'Learn python')
'''
)
conn.commit()
if
__name__
=
=
"__main__"
:
app.run()
上述的代碼關鍵的地方, fout = open(filedir +'/'+ filename,'wb')
官方文檔給的例子是打開的模式是'w', 但是下面有一行說明:
[事實上,一定要以"mb"模式打開文件(在windows下), 也就是二進制可寫模式, 否則圖片將無法上傳。]
我之前用w試著運行, 文本文件可以上傳, 但是圖片等文件, 就會文件錯誤, 於是修改成二進制文件的方式, 之後就正常了.
源代碼下載:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /pub/2011/12/12/web.py任意文件上傳(Windows下)/