Python Cloudinary实现图像和视频上传详解

 更新时间:2022年11月16日 10:48:29   作者:std7879  
这篇文章主要介绍了Python Cloudinary实现图像和视频上传功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

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参考中的上传方法。

到此这篇关于Python Cloudinary实现图像和视频上传详解的文章就介绍到这了,更多相关Python图像和视频上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python操作ie登陆土豆网的方法

    python操作ie登陆土豆网的方法

    这篇文章主要介绍了python操作ie登陆土豆网的方法,涉及Python操作页面元素的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • 基于Python实现从头搭建一个在线聊天室框架

    基于Python实现从头搭建一个在线聊天室框架

    这篇文章主要为大家详细介绍了如何基于Python实现从头搭建一个在线聊天室框架,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-11-11
  • python实现梯度下降算法的实例详解

    python实现梯度下降算法的实例详解

    在本篇文章里小编给大家整理的是一篇关于python实现梯度下降算法的实例详解内容,需要的朋友们可以参考下。
    2020-08-08
  • 详解Django+Uwsgi+Nginx的生产环境部署

    详解Django+Uwsgi+Nginx的生产环境部署

    这篇文章主要介绍了Django + Uwsgi + Nginx 的生产环境部署,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Python自动化测试笔试面试题精选

    Python自动化测试笔试面试题精选

    在本篇文章里小编给大家整理的是一篇关于Python自动化测试笔试面试时常见的编程题,需要的朋友们可以学习参考下。
    2020-03-03
  • Python基础之值传递和引用传递详解

    Python基础之值传递和引用传递详解

    在python中,向函数传递参数的类型有两种,一种是值传递,还有一种是引用传递。本篇文章将带大家一起探究python中值传递和引用传递的使用,需要的可以参考一下
    2023-05-05
  • 详解python路径拼接os.path.join()函数的用法

    详解python路径拼接os.path.join()函数的用法

    os.path.join()函数:连接两个或更多的路径名组件。这篇文章主要介绍了python路径拼接os.path.join()函数的用法,需要的朋友可以参考下
    2019-10-10
  • django中使用POST方法获取POST数据

    django中使用POST方法获取POST数据

    这篇文章主要介绍了django中使用POST方法获取POST数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python将多个图像合并输出的实现方法

    Python将多个图像合并输出的实现方法

    这篇文章主要介绍了Python将多个图像合并输出的实现方法,本文介绍了两种将多个图像合并为一个输出的方法:使用PIL库或使用OpenCV和NumPy,这些库都可以使用Python中的简单语法和少量的代码来完成此任务,需要的朋友可以参考下
    2023-06-06
  • Python计算一个文件里字数的方法

    Python计算一个文件里字数的方法

    这篇文章主要介绍了Python计算一个文件里字数的方法,涉及Python文件操作及内容遍历的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论