2013-04-24 2 views
1

Я использую django-хранилища с boto. Все работает нормально, если я позволяю хранилищам загружать файлы S3 в моей модели как общедоступные. Однако, когда я установил ACL для частного на сохранение/обновление я получаю сообщение об ошибкеdjango хранилища с boto используя пирват ACL броски 404 при сохранении

S3ResponseError: 404 Not Found 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>https:/s3.amazonaws.com/mahbuckit/mods/1366814943/1363379259-re6pc-x-l4d2-the-witch-psd-jpgcopy.zip</Key><RequestId>9631D1222C18F323</RequestId><HostId>bmMgn75bqITigKJWM7L7JrjN2TcsPCslOt9d3LX6WvzxWbHcdBfeqBIdFSZsmhXW</HostId></Error> 

Это происходит на Добавить/обновить записи.

Это моя часть сохранения для модели, где у меня есть FileFIeld. Я переопределяю настройку acl на приватное.

def save(self, *args, **kwargs): 
     super(MyModel, self).save(*args, **kwargs) 
     if self.file: 
      conn = boto.connect_s3(settings.AWS_ACCESS_KEY_ID,settings.AWS_SECRET_ACCESS_KEY) 
      bucket = conn.create_bucket(settings.AWS_STORAGE_BUCKET_NAME) 
      k = boto.s3.key.Key(bucket) 
      k.key = settings.MEDIA_URL + self.file.name 
      k.set_acl('private') 

Однако файл сохраняет все в порядке. Это проклятые ошибки.

+0

Где вы на самом деле положил содержимое файла на S3? Я не вижу, чтобы это происходило в коде выше. – garnaat

+0

Я использую хранилища django. Он обрабатывает фактическую загрузку файла. – Vangel

ответ

1

Я нашел проблему. В отношении хорошего человека, чьи работы я использовал и модифицировал http://www.gyford.com/phil/writing/2012/09/26/django-s3-temporary.php

Я заметил, что я создаю ключ с URL-адресом. авторы указывают в твиттере. В чем причина сообщения об ошибке. Недостаток сна, но сообщение об ошибке ясно говорит о недостающем ключе, но показывает URL вместо ключа. Это моя проблема прямо сейчас. Ключ должен быть файлом или файлом + имя файла.

+0

Должен сказать, что я все еще получаю 404 на почте формы на производстве, но не локально после моего исправления, упомянутого выше. Я думаю, что, возможно, что-то пропустил или возникла новая проблема. – Vangel

0

Похоже, от того, что я проверил, вам нужно k.key отразить self.file.name:

k.key = self.file.name 
+0

вы можете быть на пути к этому. Я попробую и вернусь обратно. – Vangel