如何使用cloudinary API下载文件?

问题描述 投票:0回答:1

我正在尝试制作一个程序,该程序将.txt文件与Cloudinary同步。目的是使用HERoku运行代码,并在重新启动测功机时下载断言。问题在于,他们的网站上似乎没有下载功能(很可能是我不知道如何阅读)。

我认为fetch函数可能是我想要的,但它似乎也用于上传。我也知道有一些功能(可能不是来自Cloudinary)可以使用链接下载。这个解决方案也很好,但是我需要一种方法来获取链接(但是我很确定上传时它会被return ed),但是问题是我的程序应该首先同步这意味着我无法获取链接作为返回值。我也想知道是否有一种删除文件的方法(如果它们具有相同的名称,那么它们不会被自动替换)。

我做了一个小样本,可以上传文件,并且效果很好:

import cloudinary
import os
from cloudinary import uploader
from signal import signal, SIGINT, SIGTERM
import time

cloudinary.config(
  cloud_name = 'not_real',  
  api_key = '696969696996',  
  api_secret = 'helloWorld'  
)

def downloader():
  #something here...
  pass

downloader()

def handler(sig, frame):
  print(cloudinary.uploader.upload("TEST.txt", resource_type = "raw", public_id = "TEST"))

print("PID: ", os.getpid())
signal(SIGTERM, handler)   # to understand when the dyno is getting killed

while True:
  print("Doing nothing...")
  time.sleep(3600)

再次(简而言之),我想这样做:

  1. 通过链接或名称下载文件。
  2. 删除旧文件(如果需要)

任何帮助将不胜感激。

upd:看来通往Cloudinaty .txt文件的链接打开了一个只有文字的空网页,所以我想我可以这样做

r = requests.get("https://res.cloudinary.com/name/raw/upload/v1589215899/TEST.txt")
print(r.text)

,但我想知道是否有更好的解决方案。

python cloudinary
1个回答
0
投票

raw上传到Cloudinary之后,返回包含以下内容的响应:

{
  "public_id": "sample.txt",
  "version": 1371928603,
  "signature": "9088291a2c12202767cfa7c5e874afee72be78cd",
  "resource_type": "raw",
  "created_at": "2017-06-22T19:16:43Z",
  "tags": [],
  "bytes": 6144,
  "type": "upload",
  "etag": "107bf134b5afd11cc7544d60108d87b", 
  "url": "http://res.cloudinary.com/demo/raw/upload/v1371928603/sample.txt",
  "secure_url": 
         "https://res.cloudinary.com/demo/raw/upload/v1371928603/sample.txt"
  "original_filename": "myoriginaltextfile"
}

Cloudinary建议存储public_idresource_typetypeversion(可以省略),以便稍后可以重新生成Cloudinary URL。 public_id是资产的唯一标识符。 resource_type标识它是什么资源,例如imagevideorawtype是该资产的delivery type,例如upload(表示公开),privateauthenticated仅举几例。 version是资产上载的时间戳。话虽如此,一旦有了这些资产详细信息,就可以通过直接构建URL或生成图像或视频标签来生成Cloudinary URL。图像/视频标签对原始文件无济于事,因此直接建立URL是可行的方法。 Cloudinary Python SDK(及其任何其他SDK)具有相似的功能,但是可以找到Python here

cloudinary.utils.cloudinary_url("sample.txt", resource_type = "raw")
# Output: "https://res.cloudinary.com/demo/raw/upload/sample.txt"
© www.soinside.com 2019 - 2024. All rights reserved.