Cloudinary Error: {"error":{"message":"Missing required parameter - timestamp"}}

Cloudinary Error: {"error":{"message":"Missing required parameter - timestamp"}}

我正在尝试使用 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我的下载方法returns:生成URL:https://api.cloudinary.com/v1_1/dxoa7bbix/image/multi?mode=download&async=false&signature=5f5da549fc78ea3fd50f034cdc76e2cce3089d48&api_key=161649288458746&tag=137×tamp=1638583257.

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

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

如果您想生成一个 URL 到包含共享特定标签的资产的 ZIP 文件,那么您将需要使用提供不同功能的 generate_archive method and not multi

如果替换下面的代码:

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

有:

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

然后将生成 return 一个 URL 到一个 ZIP 文件,该文件将在访问 URL 时创建,并包含来自云的图像,其中包含 tag 你指定的。

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