python - 从管理界面上传新音频文件时,django-audiofield没有此类文件或目录

标签 python django audio

我正在尝试成功实现django-audiofield插件,但这是一个主要问题。我可以正常工作,因为在管理界面中可以通过音频字段识别我的新模型,但是当我尝试使用新的音频文件上传它时,它会抛出错误并且出现错误,我无法调试。

这是错误页面日志。

Environment:


Request Method: POST
Request URL: http://45.63.1.97/admin/website/musicpost/add/

Django Version: 1.8.4
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django_cleanup',
 'pagedown',
 'website',
 'audiofield')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'audiofield.middleware.threadlocals.ThreadLocals')


Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper
  616.                 return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner
  233.             return view(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in add_view
  1516.         return self.changeform_view(request, None, form_url, extra_context)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
  34.             return bound_func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  110.                     response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
  30.                 return func.__get__(self, type(self))(*args2, **kwargs2)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in inner
  145.                     return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in changeform_view
  1467.                 self.save_model(request, new_object, form, not add)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in save_model
  1078.         obj.save()
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save
  734.                        force_update=force_update, update_fields=update_fields)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py" in save_base
  771.                                    update_fields=update_fields, raw=raw, using=using)
File "/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.py" in send
  201.             response = receiver(signal=self, sender=sender, **named)
File "/usr/local/lib/python2.7/dist-packages/django_audiofield-0.8.1-py2.7.egg/audiofield/fields.py" in _rename_audio
  222.                     self._convert_audio(dst_fullpath, instance, ext[1:4])
File "/usr/local/lib/python2.7/dist-packages/django_audiofield-0.8.1-py2.7.egg/audiofield/fields.py" in _convert_audio
  140.             response = subprocess.Popen(command.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib/python2.7/subprocess.py" in __init__
  710.                                 errread, errwrite)
File "/usr/lib/python2.7/subprocess.py" in _execute_child
  1327.                 raise child_exception

Exception Type: OSError at /admin/website/musicpost/add/
Exception Value: [Errno 2] No such file or directory

这是我的模型的代码。
# Music post model
class MusicPost (models.Model):
    # Creation time field
    created_at = models.DateTimeField(auto_now_add=True)
    # Updated time field
    updated_at = models.DateTimeField(auto_now=True)
    # Body text for the post
    body = models.TextField()
    # Add the audio field to your model
    audio_file = AudioField(upload_to='/root/goodbyejuly/media', blank=True,
                            ext_whitelist=(".mp3", ".wav", ".ogg"),
                            help_text=("Allowed type - .mp3, .wav, .ogg"))
    # Add this method to your model
    def audio_file_player(self):
        """audio player tag for admin"""
        if self.audio_file:
            file_url = settings.MEDIA_ROOT + str(self.audio_file)
            player_string = '<ul class="playlist"><li style="width:250px;">\
            <a href="%s">%s</a></li></ul>' % (file_url, os.path.basename(self.audio_file.name))
            return player_string

    # Audio field settings
    audio_file_player.allow_tags = True
    audio_file_player.short_description = ('Audio file player')

这就是我在管理界面中注册模型的方式。
admin.site.register(MusicPost, MarkdownModelAdmin)

这是我用于正文文本的markdown模型管理窗口小部件,过去对我来说效果很好。
# Admin interface override for text field markdown preview
class MarkdownModelAdmin (admin.ModelAdmin):
    # Override specific model fields
    formfield_overrides = {
        # Override text fields to show markdown previews
        models.TextField: {'widget': AdminPagedownWidget },
    }

谁能帮我解决我的问题?如果您需要更多信息,我会提供。

最佳答案

如Alex所述,一种解决方案是安装 soxi 。您可以使用以下命令进行操作(我的发行版是ubuntu 14)。

  • sudo add-apt-repository ppa:skellat / flow1
  • sudo apt-get更新
  • sudo apt-get install sox libsox-fmt-all

  • 完整指南的链接是http://linuxg.net/how-to-install-sox-14-4-1-on-ubuntu-14-10-ubuntu-14-04-and-derivative-systems/

    关于python - 从管理界面上传新音频文件时,django-audiofield没有此类文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782417/

    相关文章:

    python - Jinja2 将整个元素放入 <option>

    python - 在 Django 的 POST 数据中将值与表单一起传递

    android-studio - 如何在Android Studio中播放声音的同时记录声音?

    python - 错误 : draw_bounding_box() missing 2 required positional arguments: 'r' and 'd'

    python - 更改 seaborn 热图中的某些方 block

    python - 为什么在将 Python 中的生成器传递给函数时可以省略周围的括号?

    python - 查询按字母顺序过滤

    django - 如何将受邀用户关联到邀请人的公司/群组?

    python - 如何直接播放来自麦克风的输入数据

    javascript - 使用 createAudioPlayer 播放音频时出错