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。
我正在尝试使用 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。