python cgi http响应向conten添加额外字节

2024-09-29 23:21:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用python cgi脚本从数据库中获取文件一切正常,但由于某些原因,似乎有一个额外的字节添加到文件中。在数据库上,大小是10265字节,但在http响应中,内容长度是10266,问题似乎来自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或直接文件中的blob),http响应总是在内容中包含额外的字节,即使服务器端的文件是正常的。欢迎任何帮助

我知道头不是一个正确的文件头,但我把它作为测试的目的


Tags: 文件addonid数据库应用程序http内容字节
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:55

我通过在头文件中提供文件的内容长度来“修复”这个问题,现在的代码如下所示:

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=

请解释一下原因

相关问题 更多 >

    热门问题