Загрузка файла из приложения Django в IBM Cloud Object Storage

Я пытаюсь подключить приложение django к IBM COS и испытываю трудности. Я записываю видео пользователя и хочу сохранить файл в IBM COS, а информацию о пользователе - в Postgres, также размещенном на IBM. Я могу подключиться к IBM COS как с терминала, так и с моего приложения и перемещать файлы, но у меня возникают проблемы с правильной настройкой хранилища по умолчанию. Я использую django-storages, пытаясь адаптировать конфигурации AWS для IBM, но, должно быть, я что-то упускаю.

Этот код сохраняет файл в IBM COS, но не делает никаких записей в БД. Проблема может быть в конфигурации? Также я не могу вручную загрузить файл из админ-панели django - получаю аналогичный трабл. Заранее спасибо за любую помощь.

settings.py

# IBM STORAGE CONFIG
IBM_API_KEY_ID = 'IBM_API_KEY_ID'
IAM_SERVICE_ID = 'IAM_SERVICE_ID'
ENDPOINT = 'https://s3.us-east.cloud-object-storage.appdomain.cloud'
IBM_AUTH_ENDPOINT = 'https://iam.bluemix.net/oidc/token'
SERVICE_INSTANCE_ID = 'SERVICE_INSTANCE_ID'

IBM_STORAGE_BUCKET_NAME = 'cloud-object-storage-3u-cos-standard-77w'

AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

models.py

class Video(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    videofilename=models.CharField(max_length=500)
    videofile=models.FileField(upload_to="video/", null=True, verbose_name="")
    
    def __str__(self):
        return str(self.videofile)

views.py

class upload_to_ibm_auto(LoginRequiredMixin, CreateView):
    model = Video
    context_object_name = 'Videos'
    form_class = VideoForm
    template_name = 'app_video/upload_to_ibm_auto.html'
    success_url = reverse_lazy('video_upload_local')

    def form_valid(self, form):
        # create connection to IBM
        cos_client  = ibm_boto3.client(service_name='s3',
        ibm_api_key_id=settings.IBM_API_KEY_ID,
        ibm_service_instance_id=settings.IAM_SERVICE_ID,
        ibm_auth_endpoint=settings.IBM_AUTH_ENDPOINT,
        config=Config(signature_version='oauth'),
        endpoint_url=settings.ENDPOINT)
        
        # assign variables for upload to IBM
        upload_name = str(form.cleaned_data['videofilename'])
        local_file_name = 'C:/zjunk/' + str(form.cleaned_data['videofile'])
        userid = str(self.request.user.id)
        uploadtime=str(datetime.datetime.now())
        key = userid + '-' + uploadtime + '-' + upload_name
        
        #key='test'+form.cleaned_data['videofilename']
        #local_file_name=form.cleaned_data['videofile'] 
        #Bucket=str('cloud-object-storage-3u-cos-standard-77w')
        bucket = settings.IBM_STORAGE_BUCKET_NAME
        print(bucket)
        
        try:
            cos_client.upload_file(Filename=local_file_name, Bucket=bucket, Key=key)
        except Exception as e:
            print(Exception, e)
        else:
            print('File Uploaded to IBM')
        
        return super(upload_to_ibm_auto, self).form_valid(form)

Traceback:

Спасибо еще раз.

Вернуться на верх