如何使用 cloudinary API 下载文件?

Posted

技术标签:

【中文标题】如何使用 cloudinary API 下载文件?【英文标题】:How to download files using cloudinary API? 【发布时间】:2020-09-01 10:30:36 【问题描述】:

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

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

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

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)

再次(简而言之)我希望这样做:

    通过链接或名称下载文件。 删除旧文件(如有必要)

任何帮助将不胜感激。

更新:似乎指向 Cloudinaty .txt 文件的链接打开了一个只有文本的空网页,所以我想我可以这样做

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

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

【问题讨论】:

您打算将该文件存储在您的服务器中还是存储在哪里? @daniel-mendoza,这个想法是将文件存储在 Cloudinary 上。但是当程序运行时,我会下载它们以减少 API 调用的数量。这里最重要的是我第一次下载时如何获得链接?我不想每次都手动输入。 当您将文件上传到 Cloudinary 时,您将获得详细信息以再次访问该内容。这不是存储在任何地方吗?我可能误解了你所说的how do I get the link when I first download? @daniel-mendoza 问题是我只能在上传内容时获得链接,但如果我没有怎么办?要求手动输入链接是荒谬的,但很有必要,因为 Heroku 在重新启动后什么都不存储。我发现你实际上可以生成这样的链接:link = cloudinary.utils.cloudinary_url(filename, resource_type = "raw")[0]。效果很好。 【参考方案1】:

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)具有类似的功能,但可以在 here 找到 Python 版本。

cloudinary.utils.cloudinary_url("sample.txt", resource_type = "raw")
# Output: "https://res.cloudinary.com/demo/raw/upload/sample.txt"

【讨论】:

以上是关于如何使用 cloudinary API 下载文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Rails-Api + Vue.js + Cloudinary + Attachinary 上传图片?

如何使用 Rails API 中的 Attachinary 将图像从 React Native App 直接上传到 Cloudinary

如何使用 axios 对 cloudinary 进行直接 api 调用?

上传到 Cloudinary API - 文件参数无效

无法将音频文件上传到 Cloudinary API(使用 javascript)

使用 ASP.NET CORE 中的链接从 Cloudinary 下载 pdf 文件