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图像和视频上传内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python利用PyAutoGUI轻松搞定图片上传

    目录 实时获取鼠标的当前坐标 开始上传了 完整脚本 运行过程 最近用vuepress建了个博客,音乐的背景图片需要网络地址. 还有博客自动复用的摘要图片也需地址 开始用的阿里云的免费对象存储oss,但又是登录又是设置读写权限的,稀碎的操作令人疲惫.能不能简单点,自动上传,并且马上能得到文件的网络地址. 于是开始探索轻量级的方案,手动给自己搞一个,一键复制开箱即用的的上传页面: 把文件传到自己的云服务器上,传完后自带文件地址和copy按钮,流程顿时清爽了许多. 接下来的问题是,图片准备好了,十几张

  • Python Flask 上传文件测试示例

    目录 Flask file upload代码 上传测试 上传临时文件 使用 tempfile 使用 StringIO 其他 Flask file upload代码 import os from flask import Flask, request, redirect, url_for, send_from_directory from werkzeug.utils import secure_filename UPLOAD_FOLDER = '/tmp/flask-upload-test/'

  • python 使用第三方库requests-toolbelt 上传文件流的示例

    python 使用第三方库requests-toolbelt 上传文件流,内容如下所示: # pip install requests-toolbelt 使用第三方库上传文件流 from requests_toolbelt.multipart.encoder import MultipartEncoder 补充:Python使用requests和requests_toolbelt上传文件 一.文件上传(Form 表单方式)[先将文件读取至内存中,再将内存中的文件信息上传至服务器] 1.单文件上传

  • Python Flask实现图片上传与下载的示例详解

    目录 1.效果预览 2.新增逻辑概览 3.tuchuang.py 逻辑介绍 3.1 图片上传 3.2 图片合法检查 3.3 图片下载 4.__init__.py 逻辑介绍 5.upload.html 介绍 5.1 upload Jinja 模板介绍 5.2 upload css 介绍(虚线框) 5.3 upload js 介绍(拖拽) 1.效果预览 我们基于 Flask 官方指导工程,增加一个图片拖拽上传功能,效果如下: 2.新增逻辑概览 我们在官方指导工程上进行增加代码,改动如下: 由于 fl

  • Python中Selenium上传文件的几种方式

    目录 1. input 元素上传文件 2. input 元素隐藏 3. 文件选择对话框 4. 使用 pywinauto 上传文件 5. pyautogui 6. 并发问题 Selenium 封装了现成的文件上传操作.但是随着现代前端框架的发展,文件上传的方式越来越多样.而有一些文件上传的控件,要做自动化控制会更复杂一些,这篇文章主要讨论在复杂情况下,如何通过自动化完成文件上传. 1. input 元素上传文件 如果页面需要文件上传,那么在大多数情况下,都能在页面源代码中找到一个input的元素.

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

    Cloudinary提供了一个API,用于将图像.视频和任何其他类型的文件上传到云端.上传到Cloudinary的文件通过安全备份和修订历史记录安全存储在云中.Cloudinary的API允许从您的服务器.直接从访问者的浏览器或移动应用程序或通过远程公共URL获取安全上传. Cloudinary的Python SDK封装了Cloudinari的上传API并简化了集成.Python方法可用于轻松地将Python图像和视频上传到云端,Python视图助手方法可用于直接从浏览器上传到Cloudinar

  • Python中八大图像特效算法的示例详解

    目录 0写在前面 1毛玻璃特效 2浮雕特效 3油画特效 4马赛克特效 5素描特效 6怀旧特效 7流年特效 8卡通特效 0 写在前面 图像特效处理是基于图像像素数据特征,将原图像进行一定步骤的计算——例如像素作差.灰度变换.颜色通道融合等,从而达到期望的效果.图像特效处理是日常生活中应用非常广泛的一种计算机视觉应用,出现在各种美图软件中,这些精美滤镜背后的数学原理都是相通的,本文主要介绍八大基本图像特效算法,在这些算法基础上可以进行二次开发,生成更高级的滤镜. 本文采用面向对象设计,定义了一个图像

  • Java大文件上传详解及实例代码

    Java大文件上传详解 前言: 上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败. 一开始以为是session过期或者文件大小受系统限制,导致的错误.查看了系统的配置文件没有看到文件大小限制,web.xml中seesiontimeout是30,我把它改成了120.但还是不行,有时候10分钟就崩了. 同事说,可能是客户这里服务器网络波动导致网络连接断开,我觉得有点道理.但是我在本地测试的时候发觉上传也失败,网络原因排除. 看了日志,错误为: java.lang.OutOfMemor

  • 对Python+opencv将图片生成视频的实例详解

    如下所示: import cv2 fps = 16 size = (width,height) videowriter = cv2.VideoWriter("a.avi",cv2.VideoWriter_fourcc('M','J','P','G'),fps,size) for i in range(1,200): img = cv2.imread('%d'.jpg % i) videowriter.write(img) 以上这篇对Python+opencv将图片生成视频的实例详解就是

  • python Elasticsearch索引建立和数据的上传详解

    今天我想讲一讲关于Elasticsearch的索引建立,当然提前是你已经安装部署好Elasticsearch. ok,先来介绍一下Elaticsearch,它是一款基于lucene的实时分布式搜索和分析引擎,是后台系统,用来存储数据,检索数据,属于完全命令行交互. 那为什么选择python作为脚本进行命令的写入和数据的上传呢?那是因为Python里面有固定的模板,可以上传数据到Elasticsearch. 接下来就聊一聊该如何编写代码: 我们上传数据之后,数据到哪里去了呢? 存在索引里面了. 那

  • 用Python制作灯光秀短视频的思路详解

    一.引言 2021年4月8日武汉重启一周年,这是个值得庆祝的日子,作为一个武汉人和一个死宅程序员,老猿也想在这个日子留下点什么.想起武汉长江两岸的灯光秀,顿时有了主意,那就用程序实现一个武汉重启庆祝的灯光秀短视频吧,于是在4月7日晚开始构思和着手开发,4月8日晚终于顺利完成,并且通过使用OpenCV.OpenCV+Moviepy两种方式进行了实现. 本文介绍结合Python+OpenCV+Moviepy实现的思路和过程,Python+OpenCV实现的思路和过程将在另外的博文中单独介绍. 二.实

  • java使用webuploader实现跨域上传详解

    前言 项目中使用webuploader进行文件上传,需要用到跨域,查看webuploader的issues发现是支持上传的,但是他们写的回复都是不清不白的,有点迷糊:想了半天才知道咋回事,也可能是我比较笨,再次记录下java中详细的处理. webuploader进行上传,会执行2个请求:一个option请求,一个post(根据你的webuploader的配置method 值决定),需要在option请求中对响应头进行处理,post响应头也进行响应的处理. 以servlet为例: @WebServ

  • node.js使用express框架进行文件上传详解

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究. 目前的研究算是取得的比较好的进展. Settings-Sync中通过快捷键上传文件,其实主要还是请求后端接口. 于是我便使用node.js模拟一个服务,这个服务其实就相当于github api(Settings-Sync实际请求的接口,比如token验证,gist存储创建等都是来自github 对应的api). 话不多说,直接代码贴起讲解: 1.创建一个node.js项目(这里我以ex

  • python如何将自己的包上传到PyPi并可通过pip安装的方法步骤

    目录 一.创建包 1.1 包概念简述 1.2 创建包结构 二.上传前准备 2.1 完善包相关信息 2.2 创建可供分发的包 三.上传包至PyPi 3.1 使用PyPi测试环境先熟悉上传步骤 3.2 正式上传至PyPi 四.使用pip安装测试 4.1 安装PyPi测试环境的包 4.2 安装PyPi正式环境的包 五.包版本更新 当逐渐在用python开发项目或者日常使用时,一般需要大量使用别人提供的包,这些包能高效的帮助我们快速高效的完成指定任务或者需求,不过有时也会想,自己如果能够把自己的代码打包

  • Python Django框架单元测试之文件上传测试示例

    本文实例讲述了Python Django框架单元测试之文件上传测试.分享给大家供大家参考,具体如下: Submitting files is a special case. To POST a file, you need only provide the file field name as a key, and a file handle to the file you wish to upload as a value. For example: >>> c = Client()

随机推荐