2010-05-21 87 views
0

我創建了一個測試的形式,這將要求用戶輸入一個名稱,並上傳圖片文件:需要獲得上傳的文件到本地PC

<html lang="en"> 
<head> 
    <title>Testing image upload</title> 
</head> 
<body> 
    <form action="/services/upload" method="POST" enctype="multipart/form-data"> 
    File Description: <input name='fdesc' type='text'><br> 
    File name: <input type="file" name="fname"><br> 
    <div><input type="submit"></div> 
    </form> 
</body> 
</html> 

我需要得到該文件由用戶上傳並將其存儲在本地PC上。這可以在python中完成嗎?請告訴我。

+0

抱歉有錯誤,我的本地PC意味着我們的開發服務器本身,上面提到的html文件被加載。是否有可能獲得該文件並將其存儲在/ tmp或其他位置。 – Suhail 2010-05-21 08:10:37

+0

你如何使用Python? mod_python,mod_wsgi,一個CGI腳本或其他東西? – 2010-05-21 08:11:12

+0

它和Apache服務器,我使用mod_python – Suhail 2010-05-21 08:12:26

回答

1

mod_python包括FieldStorage class它允許您訪問上傳的表單數據。爲了使用它,你就會把類似的東西在你的Python腳本如下:

req.form = FieldStorage(req) 
description = req.form['fdesc'] 

由於fdesc是一個文本輸入,description將是一個字符串(更確切地說,StringField,您可以作爲治療一個字符串)。

file_field = req.form['fname'] 

由於fname是一個文件輸入,file_field不會是一個字符串(或StringField),而是一個Field對象,其允許訪問所述文件數據。屬性file_field.file是一個類似文件的對象,你可以用它來讀取文件的內容,比如像這樣:

for line in file_field.file: 
    # process the line 

你可以使用這個地方你選擇的複製文件的數據,例如。

file_field.filename是由客戶端提供的文件的名稱。其他有用的屬性列在我鏈接到的文檔中。

+0

大衛,我無法得到它的工作,我認爲我做錯了方式,你能給我一些例子。 – Suhail 2010-05-21 09:32:15

+0

我做到了。在我的回答中有幾行示例代碼,並且在我給你的鏈接上有更完整的示例。如果你已經完成了這些工作並且無法弄清楚你的代碼不工作的原因,請發佈一個新問題(因爲「爲什麼不工作」是與「我該怎麼做」的單獨問題) ),並確保包含您的代碼和錯誤消息的詳細信息。 – 2010-05-21 13:06:50

+0

嘿大衛,我懂了,謝謝你的幫助。 – Suhail 2010-05-22 07:39:52

0

嘿,大衛,我得到它的工作,我就是這麼做的:

filename = request.FILES['fname'] 
destination = open('%s/%s'%(/tmp/,fileName), 'wb+') 
for chunk in filename.chunks(): 
      destination.write(chunk) 
destination.close() 

file = open('%s/%s'%(/tmp/,fileName),"rb").read() 

感謝您的幫助球員。

+0

如果沒有其他人的答案是足夠的,可以將您的代碼作爲答案來發布是好的,但是您可能不應該將其作爲迴應其他人。 – 2010-05-22 11:47:08