我试图允许用户从表单上传文件到服务器,然后从我的网站显示图像。该脚本是Python,它还通过cursor.execute命令与MySQL连接。我可以上传文本表单字段,但不能上传文件内容,类似于以下报告的问题: uploading html files and using python
我可以上传所选的文件名,但不能读取;我收到一个读错误。
我的代码是:
#!/home2/snowbear/python/Python-2.7.2/python
import cgi
# Import smtplib for the actual sending function.
import smtplib
import shutil
import datetime
import os
import sys, traceback, re
# Helps troubleshoot python script.
import cgitb; cgitb.enable()
# Import mysql database program.
import mysql.connector
# Windows needs stdio set for binary mode.
try:
import msvcrt
msvcrt.setmode (0, os.O_BINARY) # stdin = 0
msvcrt.setmode (1, os.O_BINARY) # stdout = 1
except ImportError:
message = "No Windows msvcrt to import"
pass
print '<form name="PB_Form" action="PB_resubmit.py" method="post" enctype="multipart/form-data">'
...
# Get form values.
...
if form.has_key("filePix1") and form["filePix1"].value != "":
txtImage1 = form['filePix1'].value
fileItem1 = form['filePix1']
if not fileItem1.file:
print "<br><center>No fileItem1: %s</center>" % fileItem1
else:
data = fileItem1.file.read()
objFile = open(txtImage1, "w+")
objFile.write(data)
objFile.close()
else:
newImage1 = False
...
我收到该行的错误:
data = fileItem1.file.read()
错误是:
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'read'
args = ("'NoneType' object has no attribute 'read'",)
message = "'NoneType' object has no attribute 'read'"
虽然&#34; fileitem1&#34;是输入到表单中的文件的正确句柄,因为我可以获取文件名,但是,它没有&#34;读取属性,&#34;在错误消息中指定。
我使用Bluehost作为我的服务器。文件读取属性可以被服务器关闭,还是我遗漏了一些东西,比如处理文件的另一个特殊导入?
感谢任何建议,Walter
&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培;&安培; 新说明:
问题在于表格[&#39; filePix1&#39;]&#34; file&#34;和&#34;文件名&#34;属性丢失;只有&#34;值&#34;属性存在,这只会产生文件名,而不是文件内容。
通过大量实验,我发现浏览器Sea Monkey正在导致缺少属性的问题。当我使用Firefox时,&#34;文件,&#34; &#34;文件名,&#34;和&#34;价值&#34;属性是正常的。我不知道Sea Monkey为什么不支持文件加载属性。
沃尔特