Python3.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文件,而是一个字节字符串(在浏览器中打开它说:
^{pr2}$所以我去掉了加密、解密和保存,现在我只想让它把我刚刚上传的文件还给我:
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())
使用这个文本文件可以让我得到通常的下载或保存,但是文本文件只是相同的字节字符串,而不是实际的文件。在
我花了最后一天的时间试图找到能让Google给出答案的准确正确的单词组合,但是在(非常少的,令人惊讶的)完全适用的结果中,它们都表现得好像这是一个基本的操作,应该会起作用。我发现了一些关于从二进制文件读取并正确打开它们的东西,除了上传的文件是临时文件,而不是保存的文件,它在内存中,并且open不是一个有效的方法。我也看到过在python中设置文件服务器的东西,但是他们说的是设置实际的服务器,而不仅仅是输出一个文件。我需要设置一个完整的服务器来取回文件吗?在
我肯定我犯了一些难以置信的愚蠢的菜鸟错误,但我就是不知道是什么。在
print
总是包含一个额外的换行符,这会破坏二进制PDF文件。传递end=
参数或写入sys.stdout
:相关问题 更多 >
编程相关推荐