Django:使用Boto3将视频文件上传器上传到S3存储桶

时间:2018-09-27 11:55:11

标签: django python-3.x amazon-s3 file-upload boto3

我想使用Boto3将视频文件上传到AWS S3存储桶。我已经创建了一个名为“ django-test”的存储桶,并具有所需的权限。我正在使用Django,并且正在Windows 10计算机上工作。

我在Django应用的store_in_s3文件中创建了一个名为views.py的函数。

预期的文件大小小于200mbs。我对尝试过的几种方法感到有些困惑。下面是现有代码

def store_in_s3(request):
        transfer = S3Transfer(boto3.client(
            's3',
            region_name = settings.AWS_S3_REGION_NAME,
            aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
            aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY
            ))
        client = boto3.client('s3')
        bucket = "django-test"
        file = request.FILES["file"]
        filename = file.name
        transfer.upload_file(filename, bucket, "test.mov")

这时,我收到以下错误:FileNotFoundError: [WinError 2] The system cannot find the file specified: 'test.mov'

但是test.mov是我使用HTML表单上传的文件。

我的HTML格式代码如下:

<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.file }}
<button type="submit">Submit</button>
</form>

其他信息:在此开发过程中,我成功地一次上传了视频文件,但是在S3上,它的大小非常小-仅28字节。这就是为什么我重新开始构建上传器的原因。

enter image description here

非常感谢您的帮助。如果您需要有关此问题的更多信息,请随时。谢谢。

1 个答案:

答案 0 :(得分:1)

正如您提到的,文件大小大于2 MB,Django将其存储在临时位置。从错误消息中,似乎找不到文件名。因此,请通过传递临时位置路径来进行尝试,在这种情况下,即file.temporary_file_path()