Python/CGI-上载文件尝试返回空页

Python/CGI-上载文件尝试返回空页,python,upload,cgi,Python,Upload,Cgi,我真的搜索了大约50个相关页面,但从来没有看到一个问题类似于我的问题。当我按下submit按钮时,它会调用脚本,但是脚本返回一个空页面,我看到没有上传任何文件。我的代码中没有输入错误,我检查了好几次,我真的需要为我的项目运行这段代码。有什么问题吗?我在ubuntu下运行apache,代码如下: html代码: <html><body> <form enctype="multipart/form-data" action="save_file.py" method="

我真的搜索了大约50个相关页面,但从来没有看到一个问题类似于我的问题。当我按下submit按钮时,它会调用脚本,但是脚本返回一个空页面,我看到没有上传任何文件。我的代码中没有输入错误,我检查了好几次,我真的需要为我的项目运行这段代码。有什么问题吗?我在ubuntu下运行apache,代码如下:

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,)
#/usr/bin/env python
导入cgi,操作系统
进口cgib;cgib.enable()
try:#windows需要为二进制模式设置stdio
导入msvcrt
msvcrt.setmode(0,os.O_二进制)
msvcrt.setmode(1,os.O_二进制)
除恐怖外:
通过
form=cgi.FieldStorage()
#嵌套的FieldStorage实例保存该文件
fileitem=form['file']
#如果文件已上载
如果为fileitem.filename:
#从文件名中删除前导路径以避免基于目录的攻击
fn=os.path.basename(fileitem.filename)
打开('/files'+fn,'wb').write(fileitem.file.read())
消息='文件'+fn+'已成功上载'
其他:
消息='未上载任何文件'
打印“”\
内容类型:text/html\n
%

“%”(消息,)
我刚刚测试了您的脚本,对路径进行了一些小的修改,使其在本地工作。如果路径设置正确,权限设置正确,此代码就可以正常工作

以下是需要确保的事项:

  • 在html文件的表单属性中,确保指向cgi bin中的python脚本:
    action=“/cgi bin/save_file.py”
    。对我来说,我在web服务器的根目录下有一个cgi文件箱,我把python脚本放在那里。如果从web服务器上的标准文档位置运行脚本,则该脚本将不起作用

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

  • 在save_file.py中,确保您正在构建有效路径以打开文件进行保存。出于测试目的,我将我的设置为绝对,但类似这样:
    open(os.path.join('/path/to/upload/files',fn)


  • 正确设置这些点后,您应该不会有任何问题。

    我刚刚测试了您的脚本,并对路径进行了一些小的修改,使其在本地工作。正确设置路径和权限后,此代码工作正常

    以下是需要确保的事项:

  • 在html文件的表单属性中,确保指向cgi bin中的python脚本:
    action=“/cgi bin/save_file.py”
    。对我来说,我在web服务器的根目录下有一个cgi bin,我将python脚本放在那里。如果您从web服务器上的标准文档位置运行脚本,它将无法工作

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

  • 在save_file.py中,确保您正在构建一个有效的路径来打开文件进行保存。我将我的路径设置为绝对路径只是为了测试,但类似于这样:
    open(os.path.join('/path/to/upload/files',fn)


  • 正确设置这些点后,您应该不会有任何问题。

    我不知道在python cgi中查找错误日志的位置,您能帮我吗?无论web服务器放在哪里。我使用apache。默认日志文件在哪里?我不知道在python cgi中查找错误日志的位置,您能帮我吗?无论web服务器放在哪里我正在使用apache。默认日志文件在哪里?这是我的配置:我的两个脚本文件都在“/var/www/python/cgi-bin”下,我将chmod-R 755应用于“/var/www/python”文件夹。最后文件的文件夹路径是“/var/www/python/cgi-bin/files”我为save_file设置了chmod 755权限。可能是什么问题?我的路径有正确的脚本吗?@user1433743:通常情况下,您不会在cgi bin位置之外提供html。这只适用于cgi脚本,您可以从标准文档位置将URL指向它们。但我认为这不是您的问题。'/file但是,这可能是错误的。这是本地服务器到/文件(不是URL路径)的绝对路径,它不是“/VAR/WWW/Python/CGI bin/文件”。尝试设置一个绝对路径。我会尝试检查错误日志。因为我做了所有您所说的,并且仍然得到空白页,没有上传。您可以发送我的邮件(MeMeMCAN)。oralalp@gmail.com)您的Apache HTTP.CONF文件和MIM.CONF文件,因为我应用了您告诉我的所有步骤,并且仍然得到空白页。@ USE1431433:我使用默认的Apache服务器内置到OSX中。我怀疑它将是1-O-1为YouWHW,这里是我的配置:我的脚本文件都在“/VAR/WWW/Python /CGI bin”下,并且我应用CHMOD - R 755。“/var/www/python”文件夹。最后文件的文件夹路径是“/var/www/python/cgi-bin/files”"我为save_file设置了chmod 755权限。可能是什么问题?我的路径有正确的脚本吗?@user1433743:通常情况下,您不会在cgi bin位置之外提供html。这只适用于cgi脚本,您可以从标准文档位置将URL指向它们。但我认为这不是您的问题。'/file但是,这可能是错误的。这是本地服务器到/文件(不是URL路径)的绝对路径,它不是“/VAR/WWW/Python/CGI bin/文件”。尝试设置一个绝对路径。我会尝试检查错误日志。因为我做了所有您所说的,并且仍然得到空白页,没有上传。您可以发送我的邮件(MeMeMCAN)。oralalp@gmail.com)您的Apache HTTP.CONF文件和MIMECONF文件,因为我应用了所有您告诉我的步骤,仍然得到空白页。@ USE1431433:我使用默认的Apache服务器内置到OSX。我怀疑这将是1-to-1为您