如何在Python中通过cgi部署zip文件(或其他二进制文件)?

德维雷拉

我正在用Python和CGI编写一个小型网站,用户可以在其中上传zip文件并下载其他用户上传的文件。目前,我可以正确上传zip文件,但是在将文件正确发送给用户时遇到了一些麻烦。我的第一种方法是:

file = open('../../data/code/' + filename + '.zip','rb')

print("Content-type: application/octet-stream")
print("Content-Disposition: filename=%s.zip" %(filename))
print(file.read())

file.close()

但是很快我意识到我必须以二进制形式发送文件,所以我尝试了:

print("Content-type: application/octet-stream")
print("Content-Disposition: filename=%s.zip" %(filename))
print('Content-transfer-encoding: base64\r')
print( base64.b64encode(file.read()).decode(encoding='UTF-8') )

以及它的不同变体。只是行不通;Apache引发“来自脚本的标头格式错误”错误,因此我想我应该以其他方式对文件进行编码。

马丁·彼得斯(Martijn Pieters)

您需要在标题后打印一个空行,并且Content-disposition标题缺少类型(attachment):

print("Content-type: application/octet-stream")
print("Content-Disposition: attachment; filename=%s.zip" %(filename))
print()

您可能还想使用一种更有效的方法来上传结果文件。用于shutil.copyfileobj()将数据复制到sys.stdout.buffer

from shutil import copyfileobj
import sys

print("Content-type: application/octet-stream")
print("Content-Disposition: attachment; filename=%s.zip" %(filename))
print()

with open('../../data/code/' + filename + '.zip','rb') as zipfile:
    copyfileobj(zipfile, sys.stdout.buffer)

print()在任何情况下都不应使用二进制数据;您得到的只是b'...'字节文字语法。sys.stdout.buffer对象是基础二进制I / O缓冲区,直接将二进制数据复制到该缓冲区。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从其他语言的VB二进制文件中读取日期?

来自分类Dev

如何在Julia中读取二进制文件?

来自分类Dev

如何在一个二进制文件中连接一百万个二进制文件?

来自分类Dev

如何在GCP云功能[PYTHON]中访问二进制文件

来自分类Dev

如何在python3中创建二进制文件序列?

来自分类Dev

如何在python中修改文件的二进制状态?

来自分类Dev

二进制文件如何“二进制”?

来自分类Dev

如何通过ssh尾随二进制文件?

来自分类Dev

如何从.py文件中获取二进制文件

来自分类Dev

在SFTP中通过二进制模式传输文件

来自分类Dev

如何取消包含dll或其他二进制文件的其他开发人员的更改?

来自分类Dev

如何在Ubuntu中编辑文件的二进制或十六进制数据?

来自分类Dev

如何在Linux中比较二进制文件?

来自分类Dev

如何在PATH外部调用二进制文件

来自分类Dev

如何在Heroku上运行二进制文件

来自分类Dev

如何在Python中以二进制数计算二进制序列?

来自分类Dev

如何通过云功能在Google存储桶中以二进制模式打开文件?

来自分类Dev

如何下载二进制文件

来自分类Dev

如何附加二进制文件?

来自分类Dev

如何创建二进制文件?

来自分类Dev

如何查看二进制文件?

来自分类Dev

如何修复二进制文件?

来自分类Dev

python如何转换mysql二进制文件(16)

来自分类Dev

如何从DLL二进制文件中删除功能

来自分类Dev

如何从二进制文件中删除HomeKit API

来自分类Dev

如何更新二进制文件中的结构项

来自分类Dev

如何grep二进制文件中的行号?

来自分类Dev

如何从二进制文件中获取整数值

来自分类Dev

如何跟踪二进制文件中的项目

Related 相关文章

热门标签

归档