我们如何验证文件已通过上传完全下载到服务器?在Python CGI documentation for 3.7上,它指出如果发生错误(例如上载被中断或取消),则done
属性将设置为-1。我对于在尝试将其作为LARGEBLOB
存储在网站MySQL数据库中之前如何确保已下载整个文件感到困惑。
如何在确保done
不为-1(上传中断或无法完成)的同时验证文件已完全上传?
我认为它与done
属性有关,因此得名,但是如何让Python等到文件上传完成呢?关于我的python版本的CGI的文档并未真正扩展done
的行为。
我认为所有POST数据都将在执行python脚本之前上传。但是对于文件上传,我不知道是不是这种情况。
这些文件的大小可能接近2 GB,因此我想花最少的时间在服务器端处理它们,并避免CPU密集型处理。
文档指出:
如果字段表示上传的文件,则通过value属性或getvalue()方法访问该值将读取内存中的整个文件(以字节为单位)。这可能不是您想要的。您可以通过测试文件名属性或文件属性来测试上传的文件。然后,您可以从file属性读取数据,然后将其自动关闭,作为FieldStorage实例的垃圾回收的一部分(read()和readline()方法将返回字节)
所以,如果我这样做了:
...
fileitem = form['myfile']
if fileitem.file:
print("<p> The file has been uploaded completely and successfully </p>")
else:
print("<p> The file wasn't uploaded successfully</p>")
...
但是如果我可以测试done
属性,那么file
属性会出现在图片的什么位置?
在文档中,他们执行以下代码:
fileitem = form["userfile"]
if fileitem.file:
# It's an uploaded file; count lines
linecount = 0
while True:
line = fileitem.file.readline()
if not line: break
linecount = linecount + 1
为什么逐行读取文件?就我而言,我不想将POST中的文件数据写入服务器上的文件中,而是直接将其从内存中写入数据库中。
如果我刚做过fileitem.file.read()
和fileitem.file is True
,那么如果done
属性为{{1},我什至需要检查-1
是否为file
}说明如何测试上传的文件?
换句话说,如果用户取消了上传,True
会不会只是fileitem.file
? False
不会完全多余吗?