Mezzanine FileBrowser不允许我选择图像

时间:2017-09-12 19:18:32

标签: python django amazon-s3 mezzanine

我正在使用夹层来部署一个简单的博客网站。网站的每个部分都有一个标题,需要博客团队轻松更改。我的解决方案是为博客团队制作一个FileField的模型来更改管理页面上的页面标题。我正在使用S3存储桶来存储静态和媒体文件。

主诉:当用户上传照片时,文件会上传到S3存储桶,但我无法单击我要使用的文件上的选择按钮。 Mezzanine file selector button

我的实施:

我主要使用this tutorial来实现文件上传器的后端(我只使用了S3)。

settings.py

AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'
STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, 
STATICFILES_LOCATION)

MEDIAFILES_LOCATION = 'media'
MEDIA_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, 
MEDIAFILES_LOCATION)
DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'
MEDIA_ROOT = ''

custom_storages.py

from django.conf import settings
from storages.backends.s3boto import S3BotoStorage
from filebrowser_safe.storage import S3BotoStorageMixin

class StaticStorage(S3BotoStorage, S3BotoStorageMixin):
    location = settings.STATICFILES_LOCATION


class MediaStorage(S3BotoStorage, S3BotoStorageMixin):
    location = settings.MEDIAFILES_LOCATION

models.py

class Header(models.Model):
    file = FileField("File", max_length=200, format="Image",
        upload_to=upload_to("galleries.GalleryImage.file", ""))

    # other fields ...

错误讯息:

 FB_FileBrowseField.js:16 Uncaught TypeError: 
     Cannot set property 'value' of null at FileSubmit (FB_FileBrowseField.js:16) 
     at HTMLAnchorElement.onclick (?pop=1&type=Image:230)

FB_FileBrowserField.js

function FileSubmit(FilePath, FileURL, ThumbURL, FileType) {
    var input_id=window.name.replace(/____/g,'-').split("___").join(".");

    // left out variables for post simplicity

    input = opener.document.getElementById(input_id);

    // set new value for input field
    input.value = FilePath;

    // cut out rest of the code

问题似乎是opener方法返回null。我假设这是因为它无法在html中找到input_id。我似乎无法弄清楚为什么这是一个错误,因为我使用开箱即用的软件。我想知道是否有人可以直接指出我,以便更好地诊断这个问题,并可能修复它。

1 个答案:

答案 0 :(得分:1)

您可能正在上传一个带有Mezzanine无法识别为图片的扩展名的文件。

默认扩展程序在filebrowser-safe中设置:

'Image': ['.jpg', '.jpeg', '.gif', '.png', '.tif', '.tiff', '.svg']

您可以使用FILEBROWSER_EXTENSIONS设置修改或创建自己的扩展程序,例如:

FILEBROWSER_EXTENSIONS = {
    'Image': ['.jpg', '.jpeg', '.gif', '.png', '.tif', '.tiff', '.svg', '.image'],
}

或者,您可以使用FILEBROWSER_SELECT_FORMATS修改或创建自己的格式,其中包含名称字典(传递给FileField的{​​{1}}参数)和扩展名列表(必须在默认formatEXTENSIONS中定义。例如:

FILEBROWSER_EXTENSIONS