python cgi http响应为内容添加额外的字节

时间:2017-04-27 17:15:31

标签: java python apache sqlite http

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

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。我知道标题不是一个合适的文件头,但我把它用于测试目的。

1 个答案:

答案 0 :(得分:0)

我设法"修复"通过在标题中提供文件的内容长度来解决问题,因为代码现在看起来像这样:

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=

有关为何理解的任何解释