我遇到了一个小问题:
我有一个网站来管理不同用户的视频文件。每个用户都可以将视频上传到我不想更改的个人文件夹,因为我不想混淆来自不同用户的文件。上传视频文件后,我调用 asubprocess
应该创建一个缩略图。子进程因 中的错误而失败ffmpeg
,似乎与缺少写入权限有关。上传的文件和包含的文件夹属于 www-data。
编码:
command = ("ffmpeg -ss 00:00:10 -i %s -dframes 1 %s -y" % (video_path, image_path)).split()
subprocess.call(command)
FFMPEG 似乎以不同的用户身份运行,因为它仅在目标文件夹具有 777 权限时才有效。否则,它会失败并显示以下消息:
av_interleaved_write_frame(): I/O error occurred
Usually that means that input file is truncated and/or corrupted.
如果我touch
使用图像文件而不是通过 ffmpeg 创建它,则该文件夹是否具有 775 或 777 无关紧要。生成的文件也属于 www-data,这意味着子进程本身作为 www-data 运行,不不是吗?
我考虑过创建一个具有 777 权限的子文件夹,但我不喜欢它有两个原因:这个文件夹必须动态创建,因为我希望能够创建新用户(并在我的上传文件夹中产生新的子文件夹) . 无论如何,777 权限都不是很好的解决方案。
您对我必须更改的内容有什么建议吗?这样 ffmpeg 可以在不打开安全漏洞的情况下写入文件夹,并且在创建新用户/文件夹时无需触摸任何内容?