gpt4 book ai didi

python - 需要在 Django 应用程序中编写 .wav 文件,但不能在 Heroku(或 S3)上编写

转载 作者:太空狗 更新时间:2023-10-30 02:43:21 25 4
gpt4 key购买 nike

我有一个 Django 应用程序,用户可以在其中上传一个 .wav 文件,后端会进行一些处理,然后输出一个已处理的 .wav 文件供下载。部署到 Heroku 后,我发现我无法将 wav 文件写入 Heroku 的“临时文件系统”(在本地,正在将 .wav 文件写入 myapp/media)。

SO 的共识是应该使用Amazon 的S3 来存储静态文件。我没意见。问题是,我正在使用的 python 函数(以及我看过的所有其他函数)需要一个文件路径来写入文件。我编写 .wav 文件的代码:

output_path = "..../some_folder"

output_wav = wave.open (output_path, "w")
output_wav.setparams((nchannels, sampwidth, framerate, nframes, comptype, compname))
output_wav.writeframes(scaled_e)

我研究了 boto、django-storages 和 Heroku 的 Direct to S3 File Uploads in Python .但是,这些解决方案似乎假设您已经有一个文件可以指向(正是我没有可以写入的路径无法创建的文件)。

Cedar 堆栈提供的 tmp 文件夹可用于我的目的(尽管由于其不稳定,它不是理想的解决方案),但我什至无法在 Google 上找到如何在 python/Django 应用程序中使用它。 ..

Django/Heroku 新手在这里兜圈子,变得疯狂!非常感谢任何帮助。

最佳答案

好的,我可以通过以下方式让它工作:

  1. 使用 Python 的 open() 函数创建常规 Python 文件对象。
  2. 使用 wav() 将 .wav 文件写入所述对象。
  3. 使用 set_contents_from_file() 函数将文件保存到 S3。

我的工作(本地和 Heroku)代码:

output_filename = "my_file_name"
output_file = open(output_filename, "w+")
k = Key(bucket)
k.key = output_filename
k.set_contents_from_file(output_file, rewind=True)

注意事项:

  • 我需要在打开文件时使用“w+”模式。
  • 我需要在写入 S3 时使用“rewind=True”。
  • 如果 output_filename 中有路径,该路径会在我的 S3 存储桶中重新创建。
  • 输出的 .wav 文件在上传到 S3 之前被写入我的 Django 应用程序的应用程序根目录。

关于python - 需要在 Django 应用程序中编写 .wav 文件,但不能在 Heroku(或 S3)上编写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33621591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com