2013-07-31 79 views
1

我想讓我的處理程序檢查文件上傳的擴展名,以確保用戶不上傳惡意軟件或不相關的文件。我似乎無法找到獲取文件名服務器端的方法。 This問題,另一個說剛剛得到self.request.get("file_input_name_attr").filename,但在最近的GAE版本中,文件對象是一個字符串,因此不能要求filename獲取文件上傳的名稱 - Google App Engine Python

這裏是我的表格的相關部分:

<form action="/path" method="post" enctype="multipart/form-data"> 
    <input type="file" name="uploadFile" /> 
</form> 

一些職位(約會長達2年前)要說到做到

self.request.POST["uploadFile"].filename 

但對我來說self.request.POST["uploadFile"]返回null值

回答

1

請參閱Blobstore Python API Overview,瞭解如何使用Appengine上傳文件。

+0

我寧願不使用Blobstore,因爲我不想保存文件數據。我只是將上傳的文件附加到電子郵件中,發送並忘記它。 – Harrison

+0

您需要將其上傳到Blobstore然後刪除它。 Appengine沒有臨時文件系統。 –

+0

也許我需要澄清。我想要的文件只有它的擴展名和它的內容。我已經有了內容,我只是想要擴展。我並不擔心建立文件系統。對於簡單的工作,使用Blobstore會很昂貴。 – Harrison

0

您可能需要將文件名作爲單獨的POST參數或url參數傳遞。

self.request.POST["filename"] usually contains the actual file name. 

參考:

http://www.cs.tut.fi/~jkorpela/forms/file.html#name

+0

如何告訴我的表單通過它?您引用的網站建議瀏覽器包含文件名,但常規密鑰是什麼?我試過「文件名」,但它引發了一個KeyError。正如問題中提到的那樣,我嘗試了輸入的名稱,但是雖然沒有引發錯誤,但它卻是空的。對不起,無知...... – Harrison

0

事實證明,這樣做正確的做法是:

self.request.params["uploadFile_or_whatever_the_input_name_is"].filename 

就像this問題說明。我第一次嘗試這個時候,我的代碼中的其他東西一定是被破壞了,所以我認爲這個方法已經過時了。我想這就是它有時如何:)。

無論如何感謝你們都回答!

相關問題