我一直在使用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。我知道标题不是一个合适的文件头,但我把它用于测试目的。
答案 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=
有关为何理解的任何解释