如何使用Django在Amazon S3和Vimeo中的视频中存储图像文件

时间:2018-05-02 17:38:42

标签: django amazon-s3 vimeo django-storage

我想将图像文件存储在S3中,将视频文件存储在我的django项目中的Vimeo中。我是perl的{​​{1}}作为存储后端。由于Vimeo负责视频文件的压缩和内容传输,与S3相比价格便宜,我想将其用于视频文件。

我想过使用django模型的S3Boto3Storage中的Django-storage属性将文件上传到Vimeo,但我无法获取视频文件的绝对路径方法。

这是我对upload_to方法的实现,

FileField

但它给了我这个错误

  

OSError:[Errno 2]没有这样的文件或目录:' videoplayback.mp4'

或者我可以为我的目的自定义upload_to。我想知道什么是更好的解决方案。

修改 这是完整的堆栈跟踪

import vimeo


def vimeo_client():
    client = vimeo.VimeoClient(
        token=settings.VIMEO_ACCESS_TOKEN,
        key=settings.VIMEO_CLIENT_ID,
        secret=settings.VIMEO_CLIENT_SECRET
    )
    return client

def get_media_path(instance, filename):
    new_filename = '{}.{}'.format(uuid.uuid4(), filename.split('.')[-1])
    if instance.type == 'image':
        file_path = 'posts/media/images/{filename}'.format(
            filename=new_filename)
    else:
        client = vimeo_client()
        file_path = client.upload(
            filename,
            data={
                'name': instance.title,
                'description': instance.description
            }
        )
    logger.info("File uploaded to: [{}]".format(file_path))
    return file_path

1 个答案:

答案 0 :(得分:0)

Vimeo API支持3种类型的视频上传策略,讨论heretus方法假定视频文件位于本地系统中。要从浏览器上传视频,需要使用form-based uploads方法,这对于仅限API的服务器无用。有两种方法可以解决这个问题,

  
      
  1. 使用您自己的API端点将视频从客户端上传到API服务器,然后使用vimeo.py将其上传到Vimeo并从服务器中删除实际的视频文件

  2.   
  3. 使用vimeo.js从客户端上传视频文件,然后将返回的video_uri存储在后端。

  4.