【问题标题】:Uploading a audio file to s3 with django-audiofield, django-storages, boto. django-storages This backend doesn't support absolute paths error使用 django-audiofield、django-storages、boto 将音频文件上传到 s3。 django-storages 这个后端不支持绝对路径错误
【发布时间】:2015-09-11 02:06:11
【问题描述】:
Django==1.8
django-audiofield==0.6.4
boto==2.38.0
django-storages==1.1.8

我目前在将音频文件上传到 S3 时遇到问题。所有图像均已正确上传。当我尝试上传音频时,我得到: 异常类型:NotImplementedError 异常值:此后端不支持绝对路径。 异常位置:.../lib/python2.7/site-packages/django/core/files/storage.py 在路径中,第 115 行。

回溯到此结束……

.../lib/python2.7/site-packages/audiofield/fields.py in _set_audio_converted
                    filename = self.generate_filename(instance, os.path.basename(getattr(instance, self.name).path)) ...


.../lib/python2.7/site-packages/django/db/models/fields/files.py in _get_path
                    return self.storage.path(self.name) ...


...c/lib/python2.7/site-packages/django/core/files/storage.py in path
                    raise NotImplementedError("This backend doesn't support absolute paths.") ...

我认为它也与

有关

路径(名称)[来源]¶ 可以使用 Python 的标准 open() 打开文件的本地文件系统路径。对于无法从本地文件系统访问的存储系统,这将引发 NotImplementedError。

来自https://docs.djangoproject.com/en/1.8/ref/files/storage/

【问题讨论】:

  • 我已经让它工作了......虽然不完美,但它可以工作。

标签: python django audio amazon-s3 boto


【解决方案1】:

我已经让它工作了......虽然不完美,但它可以工作。我需要重写 django-audiofield fields.py 的一部分。特别是 def _rename_audiodef _set_audio_converted 因为它们都包含路径方法,如果您不从本地提供静态文件,则该方法不起作用。

【讨论】:

    【解决方案2】:

    就我而言,我收到此错误是因为我有一个额外的 Save 方法。

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    
        def __str__(self):
            return f'{self.user.username} Profile'
    
        # def save(self, *args, **kwargs):
        #     super().save(*args, **kwargs)
    
        #     img = Image.open(self.image.path)
    
        #     if img.height > 300 or img.width > 300:
        #         output_size = (300, 300)
        #         img.thumbnail(output_size)
        #         img.save(self.image.path)`
    

    在我禁用图像大小调整和保存方法后,错误消息消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 2012-05-01
      • 2012-07-14
      • 2013-12-06
      • 2013-06-27
      • 2014-09-15
      相关资源
      最近更新 更多