2016-09-13 31 views
0

我正在Pythonanywhere.com上的Django中构建网站,并且我正在使用Backblaze的B2云存储来存储所有静态和媒体文件。我已经上传到Backblaze的css和图像正在工作,但我无法弄清楚所有的东西都应该放在一起,所以我在这里(最小化):Django使用API​​将图像上传到cdn

在这个模型中,我想存储一个缩略图,我有一个表单可以上传它。

class Post(models.Model): 
    (...) 
    thumbnail = models.ImageField(null=True, blank=True, width_field="width_field", height_field="height_field") 
    (...) 

Backblaze先后为HTTP请求和我需要的响应所有的代码,所以我只是粘贴在一个单独的文件。我首先需要获得一个帐户授权令牌,然后是一个上传URL,然后我可以发送该文件。

因此,整个功能需要三件事情作为输入:文件日期,文件名和文件大小。作为输出,我得到文件ID(和其他东西,详情here)。

现在我想知道我需要调用该上传函数,我认为它与ImageField中的“upload_to”参数有关。我不知道实际存储在ImageField中的内容,因为我不告诉ImageField找到文件的位置。它是否使用设置文件中的媒体根目录,我将如何管理它?

+0

你的意思是你不想将图像存储在PythonAnywhere的磁盘上,而是想将其存储在backblaze中?您的用户提交的图像是什么?或者你有预先加载的图像,你现在只想显示? – conrad

+0

正确,我想用Backblaze作为CDN。我预先装载了图片和CSS/JavaScript文件,我得到了那些工作。现在我确实希望让用户上传图片并将其保存在那里。 – Bob

+0

退房django-storages。它支持大多数存储后端(但不是反向渲染)。看起来你只需要为后端实现读/写/关闭/大小的方法,你很好。你甚至可以提交一个拉取请求,让它们将它合并到上游! – conrad

回答

0

在设置中使用这些命令,您可以设置MEDIA_URL以及图像的存储位置。这里的图像存储在SRC/media_cdn

MEDIA_URL = "/media/" 
MEDIA_ROOT = os.path.join(BASE_DIR, "media_cdn") 

你得告诉upload_to应该保存内部其他media_cdn图像会保存里面media_cdn图像,如果upload_to设置为无路径。

models.ImageField(upload_to='profiles/') 

您需要上传图片。所以,它包含图像存在的地址。

+0

但我相信我不能让Django将图像保存到Backblaze的文件路径中。我需要使用该API的权利? – Bob

+0

我认为你在那里有你的工作空间,你可以做任何事情,如heroku,amazon,azure等。如果你不能这样做,并有github存储库。我想帮助你。 – jainaman224