Cloudinary 错误:“错误”:“消息”:“缺少必需的参数 - 时间戳”

Posted

技术标签:

【中文标题】Cloudinary 错误:“错误”:“消息”:“缺少必需的参数 - 时间戳”【英文标题】:Cloudinary Error: "error":"message":"Missing required parameter - timestamp"Cloudinary 错误:“错误”:“消息”:“缺少必需的参数 - 时间戳” 【发布时间】:2022-01-10 07:25:00 【问题描述】:

我正在尝试使用 Cloudinary 的 .downloadMulti(String tag, Map options) 生成一个 URL,以将多个图像下载为具有相同标签的 zip。我生成的 URL 似乎很好,但是当我转到 URL 时,我遇到了 "error":"message":"Missing required parameter - timestamp"。

我进行了一些研究,发现我需要签署请求,但这并不是说我错过了 - 只是时间戳。我相信请求已经被签署,只需要一个适当的时间戳。我相信它需要在构造函数中,但是当我调用 Util.timestamp() 时,它不会被识别为参考。

我的 Cloudinary 初始化器:

private final Cloudinary cloudinary = new Cloudinary(ObjectUtils.asMap(
            "cloud_name", "dxoa7bbix",
            "api_key", "161649288458746",
            "api_secret", "..."));

我的上传方式:

public Photo uploadOrderImage(String imageURL, String publicId, Order order, String photoType) throws IOException 
        Map result = cloudinary.uploader().upload(new File(imageURL), ObjectUtils.asMap(
                "public_id", publicId,
                 "tags", order.getId().toString()));
        Photo sellOrderPhoto = new Photo(
                result.get("secure_url").toString(),
                photoType,
                order
        );
        return photoRepository.save(sellOrderPhoto);
    

这是我的下载方法:

public String downloadPhotos(String tag) throws IOException 
        return cloudinary.downloadMulti(tag, ObjectUtils.asMap(
                "tags", tag
        ));
    

我的下载方法返回的示例 URL:生成的 URL:https://api.cloudinary.com/v1_1/dxoa7bbix/image/multi?mode=download&async=false&signature=5f5da549fc78ea3fd50f034cdc76e2cce3089d48&api_key=161649288458746&tag=137×tamp=1638583257。

总的来说,我认为问题在于缺少时间戳。如果您有任何想法,那就太好了!

【问题讨论】:

【参考方案1】:

错误的原因是参数应该是timestamp,但根据你分享的URL,它实际上是×tamp

如果您想生成包含共享特定标签的资产的 ZIP 文件的 URL,那么您将需要使用 generate_archive 方法,而不是提供不同功能的 multi。

如果替换以下代码:

    return cloudinary.downloadMulti(tag, ObjectUtils.asMap(
        "tags", tag
    ));

与:

    return cloudinary.downloadZip(ObjectUtils.asMap(
        "tags", tag, 
        "resource_type", "image")
    );

然后,它将生成并返回一个指向 ZIP 文件的 URL,该文件将在访问该 URL 时创建并包含来自您的云的图像,其中包含您指定的 tag

您使用的 Cloudinary Java SDK 将在使用任何内置方法时自动处理签名/时间戳生成,因此,如果出现以下情况,您无需对 SDK 代码进行任何更改或自行计算签名使用内置方法。仅当您不打算使用任何 SDK 而是使用您自己的自定义代码与 Cloudinary API 集成时才需要生成签名 - 例如,如果您使用的语言尚不存在 Cloudinary SDK。在这种情况下,如果您想执行经过身份验证的 API 调用,您需要自己 generate authentication signatures。

【讨论】:

以上是关于Cloudinary 错误:“错误”:“消息”:“缺少必需的参数 - 时间戳”的主要内容,如果未能解决你的问题,请参考以下文章

从浏览器错误请求直接上传到 Cloudinary

由于“cloudinary.uploader 未定义”错误,从 cloudinary 中删除媒体文件失败

Apollo-upload-client 与 Cloudinary

为啥我在 Cloudinary Java 上收到“无效签名”错误?

在 Pythonanywhere 上使用 Cloudinary 上传的图像得到 [错误 111]

缺少api密钥android Cloudinary上传错误