来自 Cloudinary 的 GET 请求失败。错误:请求的资源上不存在“Access-Control-Allow-Origin”标头

问题描述 投票:0回答:3

我正在从 React 和 Vite 应用程序向 cloudinary API 发出请求。我不断收到这两个错误:

从源“https://7aac-2806-2a0-1400-85b6-f0cb-e8b0-4880-f0ed.ngrok”访问“https://api.cloudinary.com/v1_1/sombra/image/list”处的 XMLHttpRequest -free.app' 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

ImageGallery.jsx?t=1688258885347:26 GET https://api.cloudinary.com/v1_1/sombra/image/list net::ERR_FAILED 404(未找到)(我检查了很多次,云名称是正确的)

这是组件:

import { useEffect, useState } from 'react';
import axios from 'axios';

const ImageGallery = () => {
  const [images, setImages] = useState([]);

  useEffect(() => {
    const fetchImages = async () => {
      try {
        const response = await axios.get(
          'https://api.cloudinary.com/v1_1/sombra/image/list'
        );

        setImages(response.data.resources);
      } catch (error) {
        console.error('Error fetching images:', error);
      }
    };

    fetchImages();
  }, []);

  return (
    <div>
      <h1>Image Gallery</h1>
      <div>
        {images.map((image) => (
          <img
            key={image.public_id}
            src={image.secure_url}
            alt={image.public_id}
          />
        ))}
      </div>
    </div>
  );
};
export default ImageGallery;

我尝试建立一个隧道,因为显然这个错误很常见,并且可能是由我的电脑引起的。还尝试更新我的 vite.config.js 文件中的 CORS 规则,但似乎也不起作用。这是我粘贴的代码

 server: {
    proxy: {
      "/api": {
        target: "https://api.cloudinary.com/v1_1/sombra/image/list",
        changeOrigin: true,
        secure: false,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },

请帮忙!!

reactjs cors vite cloudinary
3个回答
0
投票

您需要提供您的

API_KEY
API_SECRET
和您可以在仪表板上找到的
cloud_name
,并将其替换为下面 URL 中的值

import axios from 'axios';

const response = await axios.get("https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/<cloud_name>/resources")

这里是文档的链接:从cloudinary获取资源


0
投票

首先,您向 (

https://api.cloudinary.com/v1_1/sombra/image/list
) 发出请求的 API 端点与任何 Cloudinary API 端点都不匹配。

我假设您尝试调用 Admin APIGet Resources 方法来获取具有“resource_type”

image
和“type”
list
的资产列表。如果是这样,则请求 URL 缺少您的云名称后面的
resources
。换句话说,应该是:

https://api.cloudinary.com/v1_1/sombra/resources/image/list

不支持将管理 API 方法作为跨源请求的一部分进行调用(例如通过 AJAX/XHR 等),因此,您看到的 CORS 错误是预期的且是正确的响应。

管理 API 使用基本身份验证与您的云的

API Key
API Secret
API Secret
不应在客户端使用/公开,而只能在服务器端使用。

如果您想使用 Admin API 中的任何方法,您应该从后端服务器发出请求。您可以通过使用任何 HTTP 库直接调用 API 端点来执行此操作,也可以使用 Cloudinary 的后端 SDK 之一来执行调用。 SDK 为 Cloudinary 的 API 提供了包装器,包括 Admin,您只需调用要调用的 API 的专用方法并传递其所需的参数,而无需自己构造请求。


0
投票

确保将 your_api_keyyour_api_secretcloud name 替换为您的实际 Cloudinary 凭据。

要获取 JSON 数据,请使用以下 URL:

https://<API_KEY>:<API_SECRET>@api.cloudinary.com/v1_1/<CLOUD_NAME>/resources/image

输出将类似于以下结构:

{
"resources": [
{
  "asset_id": "***",
  "public_id": "***",
  "format": "jpg",
  "version": 1725557946,
  "resource_type": "image",
  "type": "upload",
  "created_at": "***",
  "bytes": 207897,
  "width": 1000,
  "height": 560,
  "asset_folder": "***",
  "display_name": "***",
  "access_mode": "public",
  "url": "***",
  "secure_url": "***"
}], "next_cursor": "****"}
© www.soinside.com 2019 - 2024. All rights reserved.