python - 在 Django 中为生成的 zip 文件设置正确的权限

标签 python django permissions zip

我正在使用 Django 和 Python2.6 生成自定义呈现的 Django 模板的 zip 文件,供每个用户下载自定义的 zip 文件。目前,views.py 中的代码如下所示:

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 文件),我可以提取内容。然而,唯一的问题是,对于我的默认用户,生成文件的权限既不是read 也不是write,我的网站用户也不是。

如何在下载前更改自动生成文件的权限?

更新:

我试过使用 os.chmodos.fchmod,正如 Mike 所建议的,但这需要一个路径名(我没有)或给出错误(对于 fchmod):

ZipFile 实例没有属性 '__trunc__'

我想,一个选择是先保存 zip 文件,设置权限,然后允许下载,但这似乎有点矫枉过正 - 必须有更好的方法来解决这个简单的问题。有人有任何建议或想法吗?

更新2:

似乎这个问题仅限于 Unix 系统,因为它在 Windows 和(显然)OS X 中运行良好。我发现了一个类似的线程 here .据我所知,它必须与 writestr 方法有关。如何使用 writestr 设置对添加到 zip 文件的文件的权限?

最佳答案

我认为这与您用来提取 zip 的任何内容有关。这些权限对我来说似乎没问题:

zk@fool:~/Downloads% ls -l | grep thefile
-rwxr-xr-x@  1 zk  staff           9 May  3 06:37 thefile.txt*

在 osx 和窗口的内置 zip 浏览器和 7-zip 上使用 Archive Utility 对我来说效果很好。检查生成的 zip 显示文件根本没有属性。所以我怀疑你用来解压文件的任何东西都只是错误地设置了权限。

您可以尝试设置 ZipInfo.external_attr:

zipInfo.external_attr = 0777 << 16L # set permissions on file

似乎修复了 linux 系统上的权限:

zk@arch:~% ls -l | grep thefile
-rwxrwxrwx  1 zk     9 May  3 07:06 thefile.txt*

关于python - 在 Django 中为生成的 zip 文件设置正确的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848061/

相关文章:

android - Android 权限处理的 Dexter 库总是触发 onPermissionDenied 回调

python - Python-具有“可疑”时间的日志文件二进制搜索

python - scipy 中的最小化,找到 N 维标量函数的所有局部最小值的算法

python - 从发布的链接/和发布的页面中提取主图像

Android自定义设备相机权限

django - 无法实现django-rules授权

Python 键错误 : 'OUTPUT_PATH'

python - 添加到多索引 DataFrame 时如何维护 lexsort 状态?

python - Web 应用程序中高效的作业进度更新

除非指定了应用程序和特定的测试方法,否则 Django 不会使用 manage.py test 运行测试