python - 获取字节对象而不是上传的文件

标签 python file-upload python-3.x bytesio

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())

这给了我:

Adobe Error

现在我已经用两个不同的 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 中设置文件服务器的内容,但他们谈论的是设置实际的服务器,而不仅仅是吐出单个文件。我需要设置一个完整的服务器来取回文件吗?

我确信我在这里犯了一些极其愚蠢的菜鸟错误,但我就是不知道是什么。

最佳答案

print 始终包含一个额外的换行符,这会破坏二进制 PDF 文件。传递 end= 参数或写入 sys.stdout:

#!/usr/bin/env python3
import sys
import cgi
tmp = cgi.FieldStorage()
dat = tmp['upload_file']
import mimetypes
gtype,encoding = mimetypes.guess_type(dat.filename)

sys.stdout.buffer.write (b'Content-type:' + gtype.encode('ascii') + b'\r\n\r\n')
sys.stdout.buffer.write (dat.file.read())

关于python - 获取字节对象而不是上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160139/

相关文章:

java - 从 Web 访问文件系统的 Java Applet 替代方案

javascript - krajee 基于 ajax 的文件上传使用文件输入插件

javascript - 如何从 dataURL 创建图像文件?

python - 格式化 SQL 查询

python - 为什么 Graph.copy() 比 NetworkX 中的 copy.deepcopy(Graph) 慢?

python - 使用自定义变压器时如何正确pickle sklearn管道

python无效文字错误

python - 如何绘制 sklearn kmeans 中的成本/惯性值?

python - Python 列表中的 Numpy.Array?

python - Pandas 中的一致性表(每行对的每行之间的 Pearson 相关性)