Python 3.2,Apache,无框架
我有一个表格来上传文件:
<form action="Files/Admin/Upload" method="post" enctype="multipart/form-data">
<input type="file" name="upload_file" style="width:100%">
<input type="submit" class="button" value="Upload">
</form>
还有一些选择框,但我不想混淆这个问题。最终目标是加密给定文件,并将其存储在某个地方,然后将其解密并返回。我设法让加密/解密工作,但不是一个pdf文件,而是一个字节字符串(在浏览器中打开它说:
b'%PDF-1.4 %âãÏÓ <snip...>
所以我去掉了加密和解密和保存,我现在只是想让它给我刚刚上传的确切文件:
import cgi
tmp = cgi.FieldStorage()
dat = tmp['upload_file']
import mimetypes
gtype,encoding = mimetypes.guess_type(dat.filename)
print ('Content-type:', gtype+'\n')
print (dat.file.read())
这给了我:
我现在已经用两种不同的 pdf 进行了尝试,并且都给出了相同的信息。
一个文本文件返回一个原始文本的字节串:
b'STUFF - \xa7112.7\r\n1\r\nSTUFF\r\n8\r\nSTUFF <snip...>
更改代码以包含处置:
import cgi
tmp = cgi.FieldStorage()
dat = tmp['upload_file']
import mimetypes
gtype,encoding = mimetypes.guess_type(dat.filename)
print ('Content-type:', gtype)
print ('Content-Disposition: attachment; filename="'+dat.filename+'"\n')
print (dat.file.read())
并且使用文本文件给了我通常的下载或保存,但文本文件只是相同的字节字符串,而不是实际文件。
我花了最后一天试图找到能让谷歌给我答案的准确的单词组合,但是在所有适用的(非常少,令人惊讶的)结果中,它们都表现得好像这是一个基本的操作,应该可以正常工作。我发现有关从二进制文件中读取并正确打开它们的内容,除了上传的文件是临时文件,而不是保存的文件,它在内存中并且 open 不是它的有效方法。我还看到了有关在 python 中设置文件服务器的内容,但他们谈论的是设置实际服务器,而不仅仅是吐出单个文件。我需要设置一个完整的服务器来取回文件吗?
我确定我在这里犯了一些非常愚蠢的新手错误,但我就是不知道是什么。