从Node.js使用Cloudinary API:在cloudinary.v2和Axios中,从特定文件夹检索资源失败

dba5bblo  于 2022-11-05  发布在  iOS
关注(0)|答案(1)|浏览(146)

没有其他Stack Overflow解决方案适合我(我找到了两个最相关的示例:How to list all the images/videos within a folder from cloudinary in Node.js?NodeJS cloudinary search API by context)来解决此问题标题中所述的问题:在Node.js中,如果我尝试通过Cloudinary.v2或Axios访问Cloudinary API来检索资源,我无法从特定文件夹(以下代码中的“entiMediatii”,包含19张图片)检索资源数据。

  • 虽然我可以简单地将它们的URL存储在MongoDB中,并以img src的形式加载它们,但创建一个临时集合感觉有些过头了,因为在我正在开发的站点的逻辑中,它们是一堆相对不重要的资产;因此,我更喜欢从云中获取它们的URL。*

因此,我在下面展示了我编写的四个不同的代码块,希望有人能帮助我。* 每个代码块记录一个空的结果列表。*

/////////////////////////// SOLUTION 1: Axios get A (within async func)
    const {data} = await axios.get('https://api.cloudinary.com/v1_1/<cloudname>/resources/image/upload?sub_folder=entiMediatici', {
        auth: {
        username: process.env.cloudKey,
        password: process.env.cloudSecret
        }
    });
    console.log(data);
    //////////////////////// SOLUTION 2: Axios post A
    axios.post(`https://${process.env.cloudKey}:${process.env.cloudSecret}@api.cloudinary.com/v1_1/<cloudname>/resources/search`, {
        "expression": "folder=entiMediatici/*"
    }).then((response) => {
        console.log(response.data);
    }).catch(err=>{console.log(err);
    });
    //////////////////////// SOLUTION 3: Axios get B
    axios.get(`https://${process.env.cloudKey}:${process.env.cloudSecret}@api.cloudinary.com/v1_1/<cloudname>/resources/image/context?folder=entiMediatici`).then((response) => {
        console.log(response.data);
    }).catch(err=>{console.log(err);
    });
    //////////////////////// SOLUTION 4: Admin API
    cloudinary.search.expression(
        'folder:entiMediatici/*' // add your folder
        ).sort_by('public_id','desc').max_results(100).execute().then(result=>console.log(result));
    ////////////////////////

谢谢你!

dtcbnfnu

dtcbnfnu1#

更新:解决方案(针对AXIOS)和后续问题

Cloudinary支持为我提供了Axios的正确语法,即在Axios POST请求中,folder后面应该是:,而不是=。此外,如果目标是子文件夹(就像在我的例子中),有必要提供完整的路径。根据他们的例子,我修改了我的代码如下。我贴出这个答案,以防其他人面临类似的问题。

axios.post(`https://${process.env.cloudKey}:${process.env.cloudSecret}@api.cloudinary.com/v1_1/<cloudname>/resources/search`, {
            "expression": "folder:<first folder in home>/<subfolder>/entiMediatici"
        }).then((response) => {
            console.log(response.data);
        }).catch(err=>{console.log(err);
        });

epasos_573的解决方案(我感谢他)的工作原理是一样的。在我的例子中,修改他提供的代码是:

axios.post(`https://${process.env.cloudKey}:${process.env.cloudSecret}@api.cloudinary.com/v1_1/<cloudname>/resources/search?expression=folder:<first folder in home>/<subfolder>/entiMediatici`).then((response) => {
            console.log(response.data);
        }).catch(err=>{console.log(err);
        });

所以,我的问题是:如果两种语法都有效,两者之间是否存在差异,使一种语法优于另一种语法?

相关问题