我正在尝试使用Cloudinary的.downloadMulti(String tag, Map options)
生成一个URL,作为一个带有相同标签的zip下载多个图像。我生成的URL看起来很好,但是当我转到URL时,我会遇到{“error”:{“message”:“缺少所需的参数-时间戳”}}。
我已经做了一些研究,我发现我需要在请求上签名,但这并不是说我错过了--只是时间戳。我相信请求已经被签署了,只是需要一个适当的时间戳。我认为它需要在构造函数中,但是当我调用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: Generated:key=161649288458746&tag=137×tamp=1638583257。
总的来说,我认为问题在于缺乏时间戳。如果你有任何想法,那就太好了!
发布于 2021-12-04 10:17:04
造成此错误的原因是,预期参数将被称为timestamp
,但根据您共享的URL,它实际上是×tamp
。
如果您想要生成一个包含共享特定标记的资产的ZIP文件的URL,那么您将需要使用归档方法而不是提供不同功能的多点。
如果您替换了以下代码:
return cloudinary.downloadMulti(tag, ObjectUtils.asMap(
"tags", tag
));
通过以下方式:
return cloudinary.downloadZip(ObjectUtils.asMap(
"tags", tag,
"resource_type", "image")
);
然后,这将生成一个URL并将其返回到一个ZIP文件,当访问该URL时将创建该文件,并包含来自云的包含您指定的tag
的图像。
当使用任何内置方法时,Cloudinary将自动处理签名/时间戳生成,因此,如果使用内置方法,则不需要对SDK代码进行任何更改或自己计算签名。只有当您不打算使用任何SDK,而是使用您自己的自定义代码与Cloudinary API集成时,才需要生成签名--比如您使用的是Cloudinary SDK还不存在的语言。在这种情况下,如果要执行经过身份验证的API调用,则需要自己执行生成身份验证签名。
https://stackoverflow.com/questions/70222567
复制相似问题