繁体   English   中英

python cgi http响应增加了额外的字节到内容

[英]python cgi http response adds extra byte to content

我一直在使用python cgi脚本从数据库获取文件,但一切正常,但是由于某种原因,似乎在文件中添加了一个额外的字节。 在数据库上,大小为10,265字节,但是在http响应中,Content-Length为10,266,问题似乎出在http响应本身。 问题在于所提供的文件是.jar,并且被Java应用程序使用,由于该额外的字节,Java应用程序随后无法使用类加载器加载它们。 用于从服务器下载内容的代码段为:

def printFileHeader():
    print 'Content-Type: text/plain;charset=utf-8'
    print

def downloadAddon(addon_id):
    dbConn = sqlite3.connect("addons.db")
    dbCursor = dbConn.cursor()
    dbCursor.execute("SELECT addon_file FROM uploaded WHERE id="+addon_id)
    blobl = dbCursor.fetchone()
    blobl = blobl[0]


    printFileHeader()
    print blobl

然后,使用请求的id调用downloadAddon()函数,但是无论我从哪里获取文件(数据库或直接文件中的blob),即使服务器端文件正常,http响应在内容中始终具有该额外字节。 欢迎任何帮助。

PS。 我知道标头不是正确的文件标头,但出于测试目的,我以这种方式放置了标头。

我设法通过在标头中提供文件的内容长度来“解决”该问题,因此代码现在如下所示:

def printFileHeader(size):
    print("Content-Disposition: attachment; filename=addon.jar")
    print("Content-Type: application/octet-stream") 
    print("Content-Length: "+str(size))
    print   

def downloadAddon(addon_id):
    dbCursor.execute("SELECT addon_file FROM uploaded WHERE id="+addon_id)
    blobl = dbCursor.fetchone()
    blobl = blobl[0]
    printFileHeader(len(blobl))
    print(blobl) 

这解决了问题,但是我仍然不明白为什么,所以仍然欢迎任何解释。 同样,在检查修复前后的响应时,这里是文件的最后6个字节:

之前(带有额外的字节)AAAAAK 之后AAAAA=

关于为什么的任何解释都值得赞赏

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM