Python?Cloudinary實現(xiàn)圖像和視頻上傳詳解
Cloudinary提供了一個API,用于將圖像、視頻和任何其他類型的文件上傳到云端。上傳到Cloudinary的文件通過安全備份和修訂歷史記錄安全存儲在云中。Cloudinary的API允許從您的服務(wù)器、直接從訪問者的瀏覽器或移動應(yīng)用程序或通過遠(yuǎn)程公共URL獲取安全上傳。
Cloudinary的Python SDK封裝了Cloudinari的上傳API并簡化了集成。Python方法可用于輕松地將Python圖像和視頻上傳到云端,Python視圖助手方法可用于直接從瀏覽器上傳到Cloudinary。
本頁介紹了使用Cloudinary上傳Python圖像和視頻的常見使用模式。
有關(guān)所有可用上傳選項和參數(shù)的詳細(xì)信息,請參閱媒體上傳文檔和上傳API參考的上傳方法。
注意:無論您的框架如何,Cloudinary提供的大部分功能都可以使用Python實現(xiàn)。如文檔中所述,某些功能僅適用于Django。
提示: Cloudinary的Upload widget提供了使用CloudinarySDK向應(yīng)用程序添加上傳功能的替代方案,從而無需開發(fā)內(nèi)部交互式上傳功能。上傳小部件是一個交互式、功能豐富、易于集成的用戶界面,使您能夠向網(wǎng)站添加Cloudinary上傳支持。只需幾行JavaScript代碼,就可以輕松地將小部件嵌入到web應(yīng)用程序中。有關(guān)詳細(xì)信息,請參閱上載小部件文檔。
服務(wù)器端上傳
您可以從Python代碼將圖像、視頻或任何其他原始文件上載到Cloudinary。上傳是通過HTTPS使用基于您帳戶的api_key和api_secret參數(shù)的安全協(xié)議完成的。
Python圖像上傳
以下方法將圖像上載到云:
def upload(file, **options)
例如,上載名為“my_image.jpg”的本地圖像文件:
cloudinary.uploader.upload("my_image.jpg")
要上載的文件可以指定為本地路徑、遠(yuǎn)程HTTP或HTTPS URL、白名單存儲桶(S3或Google storage)URL、base64數(shù)據(jù)URI或FTP URL。有關(guān)詳細(xì)信息,請參見文件源選項。
有關(guān)所有可用上傳選項和參數(shù)的詳細(xì)信息,請參閱媒體上傳文檔和上傳API參考的上傳方法。
Python視頻上傳
你上傳視頻的方式與圖片完全相同。但是,上傳方法只支持上傳高達(dá)100 MB的文件。要上傳更大的視頻,請使用upload_large方法,該方法將大文件分塊上傳到云端。
upload_large方法具有與upload方法相同的簽名和選項,并添加了可選的chunk_size參數(shù)(默認(rèn)為20 MB)。
以下示例上載Dog.mp4轉(zhuǎn)換為Cloudinary,并將其存儲在具有公共ID dog_closeup的雙層文件夾結(jié)構(gòu)中。它還執(zhí)行兩個急切的轉(zhuǎn)換,將視頻調(diào)整為正方形和小矩形。
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")
上傳響應(yīng)
默認(rèn)情況下,上傳是同步執(zhí)行的。一旦完成,上傳的圖像或視頻立即可用于轉(zhuǎn)換和交付。上傳調(diào)用返回一個哈希,其內(nèi)容如下:
{ 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 }
注意:如果您需要上傳響應(yīng)來返回實際圖像而不是哈希,那么使用upload_resource方法(除了響應(yīng)之外,它與上傳方法相同)。
響應(yīng)包括用于訪問上傳媒體資產(chǎn)的HTTP和HTTPS URL,以及關(guān)于上傳資產(chǎn)的其他信息:公共ID、資源類型、寬度和高度、文件格式、文件大?。ㄗ止?jié))、用于驗證響應(yīng)的簽名等。
數(shù)據(jù)上傳選項
Cloudinary的Python庫支持從各種來源上傳文件。
您可以通過指定圖像文件的本地路徑來上載圖像。例如:
cloudinary.uploader.upload('/home/my_image.jpg')
您可以提供創(chuàng)建的IO對象:
cloudinary.uploader.upload(open('/tmp/image1.jpg', 'rb'))
如果您的圖像已經(jīng)在線公開,您可以指定其遠(yuǎn)程HTTP URL,而不是上傳實際數(shù)據(jù)。在這種情況下,Cloudinary將為您從其遠(yuǎn)程URL獲取圖像。此選項允許更快地遷移現(xiàn)有圖像。下面是一個示例:
cloudinary.uploader.upload('https://www.example.com/image.jpg')
如果您在AmazonS3桶中有現(xiàn)有的圖像,您可以將Cloudinary指向其S3 URL。注意-此選項需要快速手動設(shè)置。聯(lián)系我們,我們將指導(dǎo)您如何允許Cloudinary訪問您的相關(guān)S3存儲桶。
cloudinary.uploader.upload('s3://my-bucket/my-path/my-file.jpg')
注意:如果您正在Django中編寫一個應(yīng)用程序,其中用戶通過web表單上傳圖像,您可以傳遞Django's請求的參數(shù)。上傳方法的文件:
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的表單字段(默認(rèn)情況下)。
from django.forms import ModelForm from .models import Photo class PhotoForm(ModelForm): class Meta: model = Photo
視圖。py文件定義了一個名為upload的視圖,該視圖顯示HTML上傳表單,并處理圖像文件的發(fā)布。這些圖像由CloudinaryFileField類從Django服務(wù)器上傳到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模板包括一個表單,用于將圖像上載到您的服務(wù)器以上載到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后,現(xiàn)在可以使用cloudinary模板標(biāo)簽嵌入圖像或圖像的轉(zhuǎn)換版本:
{% load cloudinary %} {% cloudinary photo.image format="jpg" width=120 height=80 crop="fill" %}
此外,您可以在初始化CloudinaryFileField類時分配標(biāo)記、應(yīng)用轉(zhuǎn)換或指定任何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 }] })
直接從瀏覽器上傳
上面顯示的上傳示例允許您的服務(wù)器端Python代碼將媒體資產(chǎn)上傳到Cloudinary。在此流程中,如果您有一個允許用戶上傳圖像或視頻的web表單,則媒體文件的數(shù)據(jù)會首先發(fā)送到您的服務(wù)器,然后上傳到Cloudinary。
一個更高效、更強(qiáng)大的選項是允許用戶將客戶端代碼中的圖像和視頻直接從瀏覽器上傳到Cloudinary,而不是通過服務(wù)器。這種方法允許更快的上傳和更好的用戶體驗。它還減少了服務(wù)器的負(fù)載,降低了Python應(yīng)用程序的復(fù)雜性。
您可以使用對上傳端點的簽名或未簽名調(diào)用直接從瀏覽器上傳文件,如使用表單上傳多個文件示例所示。
對于來自客戶端代碼的簽名上傳,必須在服務(wù)器端Python代碼中生成安全簽名。您可以使用api_sign_request方法生成SHA簽名:
cloudinary.utils.api_sign_request(params_to_sign, api_secret)
有關(guān)可用于簽名上傳的參數(shù)的完整列表,請參閱上傳API參考中的上傳方法。
到此這篇關(guān)于Python Cloudinary實現(xiàn)圖像和視頻上傳詳解的文章就介紹到這了,更多相關(guān)Python圖像和視頻上傳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實現(xiàn)簡單的飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)簡單的飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05使用Termux在手機(jī)上運行Python的詳細(xì)過程
這篇文章主要介紹了使用Termux在手機(jī)上運行Python的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10django利用request id便于定位及給日志加上request_id
這篇文章主要介紹了django利用request id便于定位及給日志加上request_id的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用django具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2018-08-08Python/Django后端使用PIL Image生成頭像縮略圖
這篇文章主要為大家詳細(xì)介紹了Python/Django后端使用PIL Image生成頭像縮略圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04Python使用wxPython和PyMuPDF實現(xiàn)合并PDF文檔
處理大量的PDF文檔可能會變得復(fù)雜和耗時,但是,使用Python編程和一些強(qiáng)大的庫,可以使這個任務(wù)變得簡單而高效,下面我們就來看看Python如何使用wxPython和PyMuPDF合并PDF文檔并自動復(fù)制到剪貼板吧2023-11-11