我们尝试通过AWS Lambda上的函数使用ffmpeg。我们在包含列表中包含 ffmpeg 和 ffprobe ,以便文件在发布时可用,但我们必须将它们移动到 / tmp 目录,以便我们可以使它们可执行。
目前我们有代码将它们复制到此文件夹,然后运行 chmod -R + x / tmp / ffmpeg 以使文件夹中的文件可执行。从那以后它很好,但是在第一次执行该函数时必须执行此操作似乎有点过分。
我们查看了package.json文件的“scripts”选项,并尝试了以下(除其他事项外),但似乎没有任何区别。
let debouncedInput$ = this.form.control['clientId'].valueChanges.debounceTime(1000);
我看到亚马逊建议人们在他们上传的.zip文件中设置权限,以便可执行文件具有执行权限,而不会被复制到可写文件夹和chmod'd,但我们有两个问题:
有没有什么办法可以运行某种发布后脚本来复制和设置ffmpeg库的权限?
更新:似乎MacOS可以生成一个带有两个可执行文件权限的zip文件,然后由Lambda授予。我仍然不确定如何从Windows实现这一目标。
答案 0 :(得分:2)
与Visual Studio中所需的“发布到AWS Lambda”选项相比,这还有很长的路要走,但它可以完成工作。
由于某些未知原因,亚马逊要求ZIP文件包含 Unix 样式的文件权限。作为Windows用户,我就像“ZIP文件?有权限吗?嗯?”因为Windows ZIP文件实际上没有权限。
经过一番搜索,我找到了一个能够在ZIP文件中设置权限的Python脚本。真棒。所以我试了一下。它没用。事实证明,作为文件元数据的一部分,ZIP文件存储创建文件的“主机操作系统”。 7zip有帮助地告诉我,我的文件是“FAT”。
所以,这是我的解决方案(可以明显改进并可能自动化):
import zipfile
import os
srcFileName = os.getcwd() + '\\bin\\Release\\netcoreapp1.0\\prepublish.zip'
tmpFileName = os.getcwd() + '\\bin\\Release\\netcoreapp1.0\\publish.zip'
with zipfile.ZipFile(srcFileName, 'r') as sz:
with zipfile.ZipFile(tmpFileName, 'w', zipfile.ZIP_DEFLATED) as z:
for name in sz.namelist():
srcFile = sz.open(name, "r")
print(name)
zi = zipfile.ZipInfo(name)
zi.create_system = 3
zi.external_attr = (0o764 << 16)
z.writestr(zi, sz.read(name))
z.close()
sz.close()
它需要一个包含我的代码的现有zip文件(prepublish.zip),并将其重新压缩为publish.zip,但具有764文件权限和“Unix”主机操作系统。
我希望这有助于某人。