2013-07-31 125 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问题说明。我第一次尝试这个时候,我的代码中的其他东西一定是被破坏了,所以我认为这个方法已经过时了。我想这就是它有时如何:)。

无论如何感谢你们都回答!

相关问题