Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django图像上载到Amazon S3失败,boto_Python_Django_Heroku_Amazon S3_Boto - Fatal编程技术网

Python Django图像上载到Amazon S3失败,boto

Python Django图像上载到Amazon S3失败,boto,python,django,heroku,amazon-s3,boto,Python,Django,Heroku,Amazon S3,Boto,我一直在努力让媒体文件从Django上传到AmazonS3,如果有人能帮忙,我将非常感激 我的应用通过Sqlite3数据库和Postgres在本地上传图像文件时没有问题,但当我尝试将媒体文件上传到S3时,出现以下500个错误: cannot concatenate 'str' and 'NoneType' objects 11月29日更新 看起来boto找不到我的bucket名称,即使它是在我的设置中设置的。上面的“NoneType”来自以下内容,它们来自connection.py和bucke

我一直在努力让媒体文件从Django上传到AmazonS3,如果有人能帮忙,我将非常感激

我的应用通过Sqlite3数据库和Postgres在本地上传图像文件时没有问题,但当我尝试将媒体文件上传到S3时,出现以下500个错误:

cannot concatenate 'str' and 'NoneType' objects
11月29日更新

看起来boto找不到我的bucket名称,即使它是在我的设置中设置的。上面的“
NoneType”
来自以下内容,它们来自
connection.py
bucket.py

bucket: None
INSTALLED_APPS = (
...
'storages',
)

# Local postgres database
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "name",
        "USER": "username",
        "PASSWORD": "pw",
        "PORT": "5432",
    }
}

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

AWS_QUERYSTRING_AUTH = False
AWS_ACCESS_KEY_ID = 'my-key'
AWS_SECRET_ACCESS_KEY = 'my-key2'
AWS_STORAGE_BUCKET_NAME = 'my-bucket-name'

MEDIAFILES_LOCATION = 'media'
MEDIA_URL = 'http://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
DEFAULT_FILE_STORAGE = "storages.backends.s3boto.S3BotoStorage"
我已经安装了django storages和boto,如以下文章所述:

我测试了将媒体文件手动上传到S3上的bucket中,我在本地创建的数据库实例链接到bucket中正确的媒体文件。在我看来,当django视图试图通过boto(我的
local\u settings.py中的
DEFAULT\u FILE\u存储
)将图像上载到S3时,就会出现问题

以下是我的
本地设置.py

bucket: None
INSTALLED_APPS = (
...
'storages',
)

# Local postgres database
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "name",
        "USER": "username",
        "PASSWORD": "pw",
        "PORT": "5432",
    }
}

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

AWS_QUERYSTRING_AUTH = False
AWS_ACCESS_KEY_ID = 'my-key'
AWS_SECRET_ACCESS_KEY = 'my-key2'
AWS_STORAGE_BUCKET_NAME = 'my-bucket-name'

MEDIAFILES_LOCATION = 'media'
MEDIA_URL = 'http://%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
DEFAULT_FILE_STORAGE = "storages.backends.s3boto.S3BotoStorage"
views.py中的上传表单中,我使用了如下内容:

photo = form.cleaned_data['photo']
...
recipe = Recipe(title=title, ..., photo=photo)
recipe.save()
我还尝试添加一个s3utils.py文件,如中所述。Bucket策略和CORS的添加如上述文章所述。我授予“所有人”上传/删除权限

我的
requirements.txt
包含:

Django==1.7.8
Pillow==2.6.1
awscli==1.7.36
boto==2.38.0
botocore==1.0.1
django-storages==1.1.8
whitenoise==1.0.6
...
我的应用程序使用Heroku,需要存储和托管S3中的媒体文件

有人看到我错过了什么吗?如果你需要更多的细节,请告诉我

提前多谢

回溯

Environment:

Request Method: POST
Request URL: http://127.0.0.1:5000/add/

Django Version: 1.7.8
Python Version: 2.7.10
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admindocs',
 'matboken_app',
 'crispy_forms',
 'PIL',
 'django_summernote',
 'djangoratings',
 'imagekit',
 'storages',
 's3direct')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  21.                 return view_func(request, *args, **kwargs)
File "/Users/Kenneth/Dropbox/matboken/matboken_app/views.py" in addRecipe
  678.             recipe.save()
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/base.py" in save
  589.                        force_update=force_update, update_fields=update_fields)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/base.py" in save_base
  617.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/base.py" in _save_table
  698.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/base.py" in _do_insert
  731.                                using=using, raw=raw)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
  92.                 return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/query.py" in _insert
  921.         return query.get_compiler(using=using).execute_sql(return_id)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  920.             for sql, params in self.as_sql():
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in as_sql
  878.                 for obj in self.query.objs
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/fields/files.py" in pre_save
  301.             file.save(file.name, file, save=False)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/db/models/fields/files.py" in save
  89.         self.name = self.storage.save(name, content)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/django/core/files/storage.py" in save
  51.         name = self._save(name, content)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/storages/backends/s3boto.py" in _save
  385.         key = self.bucket.get_key(encoded_name)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/boto/s3/bucket.py" in get_key
  192.         key, resp = self._get_key_internal(key_name, headers, query_args_l)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/boto/s3/bucket.py" in _get_key_internal
  199.                                                 query_args=query_args)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/boto/s3/connection.py" in make_request
  652.         auth_path = self.calling_format.build_auth_path(bucket, key)
File "/Users/Kenneth/Dropbox/matboken/env_1.8/lib/python2.7/site-packages/boto/s3/connection.py" in build_auth_path
  94.             path = '/' + bucket

Exception Type: TypeError at /add/
Exception Value: cannot concatenate 'str' and 'NoneType' objects

我将我的项目设置为通过管理员将文件上载到s3。使用django-s3direct相当简单。我在github上有一个项目。从您的错误来看,您视图中的某些代码似乎正在尝试将
字符串添加到
非类型
,即
'foo'+None
将抛出相同的错误。感谢您的评论,Ziyad。Django-s3direct看起来很有趣,我将试一试。它不会解决boto的问题,但如果它能让我的上传工作,我会很高兴!这几乎就是你上传内容到你的bucket所需要的。祝你好运,我仍在努力工作。请看我的更新上面。如果这有关系的话,我的桶区是法兰克福。这不会有什么区别。将整个堆栈跟踪向上放置。也许你错过了什么。我设置了我的项目,通过管理员将文件上传到s3。使用django-s3direct相当简单。我在github上有一个项目。从您的错误来看,您视图中的某些代码似乎正在尝试将
字符串添加到
非类型
,即
'foo'+None
将抛出相同的错误。感谢您的评论,Ziyad。Django-s3direct看起来很有趣,我将试一试。它不会解决boto的问题,但如果它能让我的上传工作,我会很高兴!这几乎就是你上传内容到你的bucket所需要的。祝你好运,我仍在努力工作。请看我的更新上面。如果这有关系的话,我的桶区是法兰克福。这不会有什么区别。将整个堆栈跟踪向上放置。也许你错过了什么。