我正在使用Django和Python2.6来生成一个zip文件,其中包含每个用户的自定义渲染Django模板,以便下载定制的zip文件。目前,在views.py中的代码如下:
通常情况下,这个方案是行得通的:zip文件(在这个例子中只包含一个txt文件)被正确地下载,我可以提取其中的内容。问题在于,生成的文件权限对于我的默认用户既不是读取也不是写入,对于我的网站用户也是如此。我该如何在下载前更改自动生成文件的权限?
更新:我尝试使用Mike建议的os.chmod和os.fchmod,但这要求路径名(我没有)或会出现错误(对于fchmod):
ZipFile实例没有属性'__trunc__'
我想,一个选择是先保存zip文件,设置权限,然后允许下载,但那似乎有点过度 - 必须有更好的方法来解决这个简单的问题。有人有什么建议或想法吗?
更新2:
似乎这个问题只限于Unix系统,在Windows和(显然)OS X上运行良好。我找到了一个类似的帖子在这里。据我所知,这必须与
def download(request):
response = HttpResponse(mimetype='application/x-zip-compressed')
response['Content-Disposition'] = 'attachment; filename=download.zip'
myzip = zipfile.ZipFile(response, 'w')
now = datetime.datetime.now()
zipInfo = zipfile.ZipInfo('thefile.txt', (now.year, now.month, now.day, now.hour, now.minute, now.second))
myzip.writestr(zipInfo, render_to_string('template.txt', locals(), context_instance=RequestContext(request)))
myzip.close()
return response
通常情况下,这个方案是行得通的:zip文件(在这个例子中只包含一个txt文件)被正确地下载,我可以提取其中的内容。问题在于,生成的文件权限对于我的默认用户既不是读取也不是写入,对于我的网站用户也是如此。我该如何在下载前更改自动生成文件的权限?
更新:我尝试使用Mike建议的os.chmod和os.fchmod,但这要求路径名(我没有)或会出现错误(对于fchmod):
ZipFile实例没有属性'__trunc__'
我想,一个选择是先保存zip文件,设置权限,然后允许下载,但那似乎有点过度 - 必须有更好的方法来解决这个简单的问题。有人有什么建议或想法吗?
更新2:
似乎这个问题只限于Unix系统,在Windows和(显然)OS X上运行良好。我找到了一个类似的帖子在这里。据我所知,这必须与
writestr
方法有关。如何设置使用writestr
添加到zip文件中的文件的权限?