2009-02-18 39 views
0

我從cgi運行python 2.4,我試圖使用python api上傳到雲服務。在php中,$ _FILE數組包含一個「tmp」元素,該元素是文件所在的位置,直到您將其放在您想要的位置。 python中的等價物是什麼?python upload - tmp/FILES在哪裏?

如果我這樣做

fileitem = form['file'] 

fileitem.filename是文件

的名字,如果我打印的FileItem,該數組只包含文件名和什麼看起來是文件本身。

我想流東西,它需要使用php的API時tmp的位置。

回答

2

該文件是一個真實文件,但創建該文件後立即斷開連接,只有在保持打開狀態並且在文件系統上不再有真實路徑時纔會存在。

你可以,但是,改變了...

可以擴展cgi.FieldStorage和更換make_file方法放置任何你想要的文件:

import os 
import cgi 

class MyFieldStorage(cgi.FieldStorage): 
    def make_file(self, binary=None): 
     return open(os.path.join('/tmp', self.filename), 'wb') 

你還必須記住,在FieldStorage對象,只有當它比臨危更1000B創建一個真正的文件(否則是cStringIO.StringIO

編輯:本cgi模塊實際上使用tempfile模塊生成文件,因此請檢查一下是否需要大量粘性細節。

+0

我不一定希望改變處理文件的方式,但是當我嘗試以塊的形式編寫文件的內容時,它對小文本文件可以正常工作,但是上傳的任何視頻或圖像都已損壞。我認爲這可以通過將其作爲php api流式傳輸來解決 – seans 2009-02-18 19:55:21

1

下面是從我的網站採取的代碼片段:

h = open("user_uploaded_file", "wb") 
while 1: 
    data = form["file"].file.read(4096) 
    if not data: 
     break 
    h.write(data) 
h.close() 

希望這有助於。