如何使用 cloudinary API 下载文件?
Posted
技术标签:
【中文标题】如何使用 cloudinary API 下载文件?【英文标题】:How to download files using cloudinary API? 【发布时间】:2020-09-01 10:30:36 【问题描述】:我正在尝试制作一个将.txt
文件与 Cloudinary 同步的程序。目的是使用 Heroku 运行代码并在 dyno 重新启动时下载断言。问题是他们的网站上似乎没有说明下载功能(很可能是我不知道如何阅读)。
我认为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)
再次(简而言之)我希望这样做:
-
通过链接或名称下载文件。
删除旧文件(如有必要)
任何帮助将不胜感激。
更新:似乎指向 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_id
、resource_type
、type
和 version
(可以省略),以便稍后重新生成 Cloudinary URL。 public_id
是资产的唯一标识符。 resource_type
标识它是什么资源,例如image
、video
或 raw
。 type
是该资产的 delivery type,例如upload
(表示公开)、private
和 authenticated
仅举几例。 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 调用?