我试图从MongoDB中的GridFS中获取一个文件,并允许用户使用Django下载zip存档。
我的views.py文件中的函数如下所示:
def GetFile(request, md5):
try:
fs = gridfs.GridFS(db)
f = db.fs.files.find_one({"md5": md5})
if f:
fileID = f['_id']
filename = f['filename']
if fileID:
doc = db.fs.chunks.find_one({"files_id": fileID})
if doc:
data = doc['data']
myFile = cStringIO.StringIO(data)
response = HttpResponse(FileWrapper(myFile), content_type = 'application/zip')
response['Content-Transfer-Encoding'] = 'Binary'
response['Content-Disposition'] = "attachment; filename=%s" % filename
except:
response = "It didn't work!"
return HttpResponse(response)
每当我调用此函数时(我在终端中使用urllib2.openurl()通过GET请求这样做),它会将文件的内容输出到终端上。但是,我希望它允许我下载包含此文件的zip存档。
我一直在看很多例子,但我无法弄清楚我哪里出错了。
提前感谢您提供任何帮助。
答案 0 :(得分:1)
关于向客户发送文件,请检查Serving large files ( with high loads ) in Django。此外,您似乎通过执行find_one直接从块集合中读取,这不是使用存储在GridFS上的文件的适当方法。理想情况下,您可以使用gridfs文件io api:
访问它response = HttpResponse(FileWrapper(fs.get_version(filename)), content_type = 'application/zip')
response['Content-Transfer-Encoding'] = 'Binary'
如果一切成功而不是在HttpReponse中再次换行,你可能想直接在try块中返回响应。