2012-06-03 39 views
1

我真的搜索了大约50个相关页面,但从未见过类似于我的问题的问题。当我按提交按钮时,它会调用脚本,但脚本返回一个空白页面,并且我看不到任何文件已上传。在我的代码中没有输入错误,我检查了好几次,我真的需要为我的项目运行此代码。可能是什么问题?我在ubuntu下运行的Apache和我的代码是:Python/CGI - 上传文件尝试返回空白页面

的html代码:

<html><body> 
<form enctype="multipart/form-data" action="save_file.py" method="post"> 
<p>File: <input type="file" name="file"></p> 
<p><input type="submit" value="Upload"></p> 
</form> 
</body></html> 

Python代码:

#!/usr/bin/env python 
import cgi, os 
import cgitb; cgitb.enable() 

try: #windows needs stdio set for binary mode 
    import msvcrt 
    msvcrt.setmode (0, os.O_BINARY) 
    msvcrt.setmode (1, os.O_BINARY) 
except ImportError: 
    pass 

form = cgi.FieldStorage() 

#nested FieldStorage instance holds the file 
fileitem = form['file'] 

#if file is uploaded 
if fileitem.filename: 
    #strip leading path from filename to avoid directory based attacks 
    fn = os.path.basename(fileitem.filename) 
    open('/files' + fn, 'wb').write(fileitem.file.read()) 
    message = 'The file "' + fn + '" was uploaded successfully' 
else: 
    message = 'No file was uploaded' 

print """\ 
Content-Type: text/html\n 
<html><body> 
<p>%s</p> 
</body></html> 
""" % (message,) 
+0

错误日志说...? –

+0

我不知道在python cgi中寻找错误日志的位置,你能帮我吗? – user1433743

+0

无论你的Web服务器放在哪里。 –

回答

1

我只是测试你的脚本,有一些小的修正的路径让它在本地为我工作。通过正确设置路径并正确设置权限,此代码可以正常工作。

以下是确保的事情:

  1. 在HTML文件中的表单属性,请确保您都指向Python脚本,住在一个cgi-bin目录:action="/cgi-bin/save_file.py"。对我来说,我在我的web服务器的根目录下有一个cgi-bin,并且在那里放置了python脚本。如果你是从一个标准的文件位置在Web服务器上运行该脚本将无法正常工作

  2. 确保您save_file.py具有可执行权限:chmod 755 save_file.py

  3. 在你save_file.py,确保您构建一个有效的路径来打开文件进行保存。我做了我的只是为了测试目的绝对的,但这样的事情:open(os.path.join('/path/to/upload/files', fn)

有了正确设置这些点,你不应该有任何问题。

+0

那么这里是我的配置: 我的脚本文件都在“/ var/www/python/cgi-bin”下,我将chmod -R 755应用到“/ var/www/python”文件夹。 最后文件的文件夹路径是“/ var/www/python/cgi-bin/files”,我为save_file设置了chmod 755权限。什么可能是这个问题?我的路线是否有正确的脚本? – user1433743

+0

@ user1433743:通常情况下,您不会将html用于cgi-bin位置。这只会是CGI脚本,你会从你的标准文档位置引导你的URL。但我不认为你的问题。 '/ files',但可能是错误的。这是本地服务器到/ files(而不是url路径)的绝对路径,它不是“/ var/www/python/cgi-bin/files”。尝试设置绝对路径。 – jdi

+0

我will.try检查错误日志。因为我做了你所说的一切,我仍然得到空白页面,没有上传。 – user1433743