Python Cloudinary实现图像和视频上传详解
作者:std7879 发布时间:2022-03-13 05:21:13
Cloudinary提供了一个API,用于将图像、视频和任何其他类型的文件上传到云端。上传到Cloudinary的文件通过安全备份和修订历史记录安全存储在云中。Cloudinary的API允许从您的服务器、直接从访问者的浏览器或移动应用程序或通过远程公共URL获取安全上传。
Cloudinary的Python SDK封装了Cloudinari的上传API并简化了集成。Python方法可用于轻松地将Python图像和视频上传到云端,Python视图助手方法可用于直接从浏览器上传到Cloudinary。
本页介绍了使用Cloudinary上传Python图像和视频的常见使用模式。
有关所有可用上传选项和参数的详细信息,请参阅媒体上传文档和上传API参考的上传方法。
注意:无论您的框架如何,Cloudinary提供的大部分功能都可以使用Python实现。如文档中所述,某些功能仅适用于Django。
提示: Cloudinary的Upload widget提供了使用CloudinarySDK向应用程序添加上传功能的替代方案,从而无需开发内部交互式上传功能。上传小部件是一个交互式、功能丰富、易于集成的用户界面,使您能够向网站添加Cloudinary上传支持。只需几行JavaScript代码,就可以轻松地将小部件嵌入到web应用程序中。有关详细信息,请参阅上载小部件文档。
服务器端上传
您可以从Python代码将图像、视频或任何其他原始文件上载到Cloudinary。上传是通过HTTPS使用基于您帐户的api_key和api_secret参数的安全协议完成的。
Python图像上传
以下方法将图像上载到云:
def upload(file, **options)
例如,上载名为“my_image.jpg”的本地图像文件:
cloudinary.uploader.upload("my_image.jpg")
要上载的文件可以指定为本地路径、远程HTTP或HTTPS URL、白名单存储桶(S3或Google storage)URL、base64数据URI或FTP URL。有关详细信息,请参见文件源选项。
有关所有可用上传选项和参数的详细信息,请参阅媒体上传文档和上传API参考的上传方法。
Python视频上传
你上传视频的方式与图片完全相同。但是,上传方法只支持上传高达100 MB的文件。要上传更大的视频,请使用upload_large方法,该方法将大文件分块上传到云端。
upload_large方法具有与upload方法相同的签名和选项,并添加了可选的chunk_size参数(默认为20 MB)。
以下示例上载Dog.mp4转换为Cloudinary,并将其存储在具有公共ID dog_closeup的双层文件夹结构中。它还执行两个急切的转换,将视频调整为正方形和小矩形。
cloudinary.uploader.upload_large("dog.mp4",
resource_type = "video",
public_id = "myfolder/mysubfolder/dog_closeup",
chunk_size = 6000000,
eager = [
{ "width": 300, "height": 300, "crop": "pad", "audio_codec": "none"},
{ "width": 160, "height": 100, "crop": "crop", "gravity": "south",
"audio_codec": "none"}],
eager_async = true,
eager_notification_url = "https://mysite.example.com/notify_endpoint")
上传响应
默认情况下,上传是同步执行的。一旦完成,上传的图像或视频立即可用于转换和交付。上传调用返回一个哈希,其内容如下:
{
u'bytes': 29802,
u'created_at': u'2017-06-25T17:20:30Z',
u'format': u'jpg',
u'height': 282,
u'public_id': u'hl22acprlomnycgiudor',
u'resource_type': u'image',
u'secure_url': u'https://res.cloudinary.com/demo/image/upload/v1571218039/hl22acprlomnycgiudor.jpg',
u'signature': u'10594f028dbc23e920fd084f8482394798edbc68',
u'type': u'upload',
u'url': u'http://res.cloudinary.com/demo/image/upload/v1571218039/hl22acprlomnycgiudor.jpg',
u'version': 1571218039,
u'width': 292
}
注意:如果您需要上传响应来返回实际图像而不是哈希,那么使用upload_resource方法(除了响应之外,它与上传方法相同)。
响应包括用于访问上传媒体资产的HTTP和HTTPS URL,以及关于上传资产的其他信息:公共ID、资源类型、宽度和高度、文件格式、文件大小(字节)、用于验证响应的签名等。
数据上传选项
Cloudinary的Python库支持从各种来源上传文件。
您可以通过指定图像文件的本地路径来上载图像。例如:
cloudinary.uploader.upload('/home/my_image.jpg')
您可以提供创建的IO对象:
cloudinary.uploader.upload(open('/tmp/image1.jpg', 'rb'))
如果您的图像已经在线公开,您可以指定其远程HTTP URL,而不是上传实际数据。在这种情况下,Cloudinary将为您从其远程URL获取图像。此选项允许更快地迁移现有图像。下面是一个示例:
cloudinary.uploader.upload('https://www.example.com/image.jpg')
如果您在AmazonS3桶中有现有的图像,您可以将Cloudinary指向其S3 URL。注意-此选项需要快速手动设置。联系我们,我们将指导您如何允许Cloudinary访问您的相关S3存储桶。
cloudinary.uploader.upload('s3://my-bucket/my-path/my-file.jpg')
注意:如果您正在Django中编写一个应用程序,其中用户通过web表单上传图像,您可以传递Django's请求的参数。上传方法的文件:
cloudinary.uploader.upload(request.FILES['file'])
Django表格和模型
如果您正在使用Django,可以使用Cloudinary的助手类将Cloudinari的上传功能集成到表单和模型中。如下面的示例所示,您可以在models.py文件中定义模型类Photo。这个类有一个CloudinaryField类的图像字段。
from django.db import models
from cloudinary.models import CloudinaryField
class Photo(models.Model):
image = CloudinaryField('image')
在表格中。py文件定义了一个PhotoForm类,该类有一个名为CloudinaryFileField类的image的表单字段(默认情况下)。
from django.forms import ModelForm
from .models import Photo
class PhotoForm(ModelForm):
class Meta:
model = Photo
视图。py文件定义了一个名为upload的视图,该视图显示HTML上传表单,并处理图像文件的发布。这些图像由CloudinaryFileField类从Django服务器上传到Cloudinary。
from django import forms
from django.http import HttpResponse
from cloudinary.forms import cl_init_js_callbacks
from .models import Photo
from .forms import PhotoForm
def upload(request):
context = dict( backend_form = PhotoForm())
if request.method == 'POST':
form = PhotoForm(request.POST, request.FILES)
context['posted'] = form.instance
if form.is_valid():
form.save()
return render(request, 'upload.html', context)
以下HTML模板包括一个表单,用于将图像上载到您的服务器以上载到Cloudinary:
{% load cloudinary %}
{% load url from future %}
{% block body %}
<div id='backend_upload'>
<form action="{% url "photo_album.views.upload" %}" method="post"
enctype="multipart/form-data">
{% csrf_token %}
{{ backend_form }}
<input type="submit" value="Upload">
</form>
</div>
{% endblock %}
存储了图像ID后,现在可以使用cloudinary模板标签嵌入图像或图像的转换版本:
{% load cloudinary %}
{% cloudinary photo.image format="jpg" width=120 height=80 crop="fill" %}
此外,您可以在初始化CloudinaryFileField类时分配标记、应用转换或指定任何Cloudinary的上传选项。
from django.forms import ModelForm
from cloudinary.forms import CloudinaryFileField
from .models import Photo
class PhotoForm(ModelForm):
class Meta:
model = Photo
image = CloudinaryFileField(
attrs = { 'style': "margin-top: 30px" },
options = {
'tags': "directly_uploaded",
'crop': 'limit', 'width': 1000, 'height': 1000,
'eager': [{ 'crop': 'fill', 'width': 150, 'height': 100 }]
})
直接从浏览器上传
上面显示的上传示例允许您的服务器端Python代码将媒体资产上传到Cloudinary。在此流程中,如果您有一个允许用户上传图像或视频的web表单,则媒体文件的数据会首先发送到您的服务器,然后上传到Cloudinary。
一个更高效、更强大的选项是允许用户将客户端代码中的图像和视频直接从浏览器上传到Cloudinary,而不是通过服务器。这种方法允许更快的上传和更好的用户体验。它还减少了服务器的负载,降低了Python应用程序的复杂性。
您可以使用对上传端点的签名或未签名调用直接从浏览器上传文件,如使用表单上传多个文件示例所示。
对于来自客户端代码的签名上传,必须在服务器端Python代码中生成安全签名。您可以使用api_sign_request方法生成SHA签名:
cloudinary.utils.api_sign_request(params_to_sign, api_secret)
有关可用于签名上传的参数的完整列表,请参阅上传API参考中的上传方法。
来源:https://blog.csdn.net/std7879/article/details/127782820


猜你喜欢
- 网上的SQL优化的文章实在是很多,说实在的,我也曾经到处找这样的文章,什么不要使用IN了,什么OR了,什么AND了,很多很多,还有很多人拿出
- 一: 删除LOG1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库2:删除LOG文件3:附加数据库 企业管理器->服务器-
- 知识点: Array方法: sort:降序 reverse:反序 效果: 代码: <style> *{ margin
- 思路:先随机排序然后再分组就好了。1、创建表:CREATE TABLE `xdx_test` ( `id` int(11) NOT NULL
- Python Dash开发Web应用的控件基础本文主要是通过Dash的Checklist组件,简单介绍使用Dash开发的Web应用展示效果如
- 本文实例讲述了Python实现简单的多任务mysql转xml的方法。分享给大家供大家参考,具体如下:为了需求导出的格式尽量和navicat导
- 本文实例讲述了Go语言转换所有字符串为大写或者小写的方法。分享给大家供大家参考。具体如下:Go语言的string模块包含了ToLower和T
- 通过valuelist的queryMap传递过来的参数默认都为string类型,在valuelist配置文件的hql中,如果直接将该值赋给整
- 今天来说说编程语言中的动态类型语言与鸭子类型。动态语言 * 对动态语言的定义:动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数
- 前言之前一直写不出来,这周周日花了一下午终于弄懂了, 顺便放博客里,方便以后忘记了再看看。 要实现的是输入一张 图,起点,终点,输出起点和终
- Python中的penpyxl是一个第三方库,可以处理xlsx格式的Excel文件。pip install openpyxl安装。penpy
- 花了两个多钟在看 ThinkPHP 框架,不想太过深入的知道它的所有高深理论。单纯想知道怎么可以用起来,可以快捷的搭建一个网站。所以是有选择
- 在ASP中Request对象是获取客户端提交数据的一个很重要的对象,大家对他也是非常熟悉了。 虽然如此,还是经常有人问我下面的几种写法有什么
- 前言MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_que
- 看代码吧~import torchimport numpy as npfrom torchvision.transforms import
- 说起页面执行时间相信大家并不陌生,如果你经常逛论坛,就会发现很多论坛底部都显示有页面执行时间,那么什么是页面执行时间呢?我个人理解是一个网页
- 前言由于数据库的类型为Data 类型,所以插入数据库的时候我先把前端传入的string类型的时间转为Time 再插入。Go 提供了两种插入的
- 本文实例讲述了django框架自定义用户表操作。分享给大家供大家参考,具体如下:django中已经给我生成默认的User表,其中的字段已经可
- 一、bs4解析import requestsfrom bs4 import BeautifulSoupimport datetimeif _
- ● 脚本用途遍历文件夹下的文件,消除文件名前的特征字符串。● 脚本实现import os,sysimport refrom string i