cloudflare - Cloudflare、R2,如何上传图片?

标签 cloudflare

Cloud Flare、R2,如何上传图片?

我是 Cloud Flare 世界的新手,

我可以通过拖动上传图片,但是

如何使用编码上传图片?来自应用程序??

我必须使用“WORKERS”<--东西吗?

最佳答案

嘿,我被这个问题困扰了两天,但无法弄清楚。所以我想分享我的解决方案。

我的目标
我正在开发一种软​​件,用于收集最终用户的数据以从他们那里获取信息。但他们需要提交一张图像供我们验证,这就是为什么我需要一个表单来让用户上传他们的文件,并需要一个 API 端点来存储他们的文件。

解决方案
我将 Cloudflare Worker 设置为 API,因为它与 R2 连接良好,您只需在 Worker 设置中定义它即可。

我的 Cloudflare 工作脚本和允许用户上传文件的示例表单

// CLOUDFLARE WORKER SCRIPT
// ------------------------
export default {
  async fetch(request, env) {
    const corsHeaders = {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': 'GET, HEAD, POST, OPTIONS',
      'Access-Control-Max-Age': '86400',
    };

    // Check for preflight request from the browser.
    if (request.method === 'OPTIONS') {
      return new Response(null, {
        headers: {
          ...corsHeaders,
          'Access-Control-Allow-Headers': request.headers.get(
            'Access-Control-Request-Headers'
          ),
        }
      });
    } else {
      // Handle actual request and store image to bucket.
      const { headers } = request;
      
      // Key is date now since we want keys to be unique. 
      const key = Date.now();
      await env.MY_BUCKET.put(key, request.body, {
        httpMetadata: {
          contentType: headers.get('content-type')
        }
      });

      return new Response('success!', {
        headers: {
          ...corsHeaders,
          'Access-Control-Allow-Headers': request.headers.get(
            'Access-Control-Request-Headers'
          ),
        }
      });
    }
  }
}
<!DOCTYPE html>
<html>
  <head>
    <title>Upload Images with Cloudflare R2</title>
  </head>
  <body>
    <form method="POST" enctype="multipart/form-data">
      <label for="image">Select image to upload:</label>
      <input type="file" name="image" id="image" /><br /><br />
      <input type="submit" value="Upload" />
    </form>

    <script>
      async function uploadImage(file) {
        fetch('https://<YOUR-OWN-WORKER>.workers.dev', {
          method: 'POST',
          headers: {
            'Access-Control-Allow-Origin': '*',
            'Content-Type': file.type
          },
          body: file
        })
          .then((response) => response.text())
          .then((data) => console.log(data))
          .catch((error) => console.error(error));
      }

      const image = document.getElementById('image');
      const onSelectFile = () => uploadImage(image.files[0]);
      image.addEventListener('change', onSelectFile, false);
    </script>
  </body>
</html>

关于cloudflare - Cloudflare、R2,如何上传图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73943907/

相关文章:

ssl - Traefik V2 和 Cloudflare : SSL error subdomain ERR_SSL_VERSION_OR_CIPHER_MISMATCH

go - 如何将 Go 的 autocert 包与 CloudFlare 结合使用?

azure - 无法验证域所有权 azure 网站以添加子域

python - 使用 tor 拒绝访问网站

.htaccess - Cloudflare 灵活的 SSL 和重定向

python - 绕过 Cloudflare Scrapeshield

redirect - SSL 域重定向到不相关的 URL?

javascript - 是否可以从 Cloudflare 工作人员重定向脚本中排除搜索机器人(例如 Google)?

google-app-engine - Google App Engine + Cloudflare 上的通配符 SSL 证书

javascript - 绕过 CloudFlare 的 100 秒超时