Cloudflare Images 中的 Direct Creator Upload 功能让您的用户通过一次性上传 URL 上传图像,而无需向客户端暴露 API 密钥或令牌。使用 direct creator upload 还可以消除对中间存储桶以及相关存储/出口成本的需求。
您可以设置 webhooks 以接收 direct creator upload 工作流的通知。
使用以下示例作为参考向 direct_upload 端点发出 POST 请求。
curl --request POST \
https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v2/direct_upload \
--header "Authorization: Bearer <API_TOKEN>" \
--form 'requireSignedURLs=true' \
--form 'metadata={"key":"value"}'成功请求后,您将收到类似于以下示例的响应。id 字段是创建者将上传的未来图像标识符。
{
"result": {
"id": "2cdc28f0-017a-49c4-9ed7-87056c83901",
"uploadURL": "https://upload.imagedelivery.net/Vi7wi5KSItxGFsWRG2Us6Q/2cdc28f0-017a-49c4-9ed7-87056c83901"
},
"result_info": null,
"success": true,
"errors": [],
"messages": []
}调用端点后,将创建新的草稿图像记录,但图像不会出现在图像列表中。如果您想检查图像记录的状态,可以使用 direct_upload 端点向一次性上传 URL 发出请求。
要检查新草稿图像记录的状态,使用如下示例所示的一次性上传 URL。
curl https://api.cloudflare.com/client/v4/accounts/{account_id}/images/v1/{image_id} \
--header "Authorization: Bearer <API_TOKEN>"成功请求后,您应收到类似于以下示例的响应。draft 字段在创建者上传图像之前设置为 true。上传图像后,draft 字段将被移除。
{
"result": {
"id": "2cdc28f0-017a-49c4-9ed7-87056c83901",
"metadata": {
"key": "value"
},
"uploaded": "2022-01-31T16:39:28.458Z",
"requireSignedURLs": true,
"variants": [
"https://imagedelivery.net/Vi7wi5KSItxGFsWRG2Us6Q/2cdc28f0-017a-49c4-9ed7-87056c83901/public",
"https://imagedelivery.net/Vi7wi5KSItxGFsWRG2Us6Q/2cdc28f0-017a-49c4-9ed7-87056c83901/thumbnail"
],
"draft": true
},
"success": true,
"errors": [],
"messages": []
}后端端点应将 uploadURL 属性返回给客户端,客户端上传图像而无需传递任何身份验证信息。
以下是一个 HTML 页面示例,它接受一次性上传 URL 并上传用户选择的任何图像。
<!DOCTYPE html>
<html>
<body>
<form
action="INSERT_UPLOAD_URL_HERE"
method="post"
enctype="multipart/form-data"
>
<input type="file" id="myFile" name="file" />
<input type="submit" />
</form>
</body>
</html>默认情况下,如果未使用,uploadURL 将在 30 分钟后过期。要覆盖此选项,请在 cURL 命令中添加以下参数:
--data '{"expiry":"2021-09-14T16:00:00Z"}'过期值必须是未来最少两分钟、最多六小时。
您可以在首次请求一次性上传 URL 时指定自定义 ID,而不是使用图像自动生成的 ID。请注意,具有自定义 ID 的图像无法使用签名 URL 令牌 功能设为私有(--requireSignedURLs=true)。
要指定自定义 ID,传递名称为 ID 的 form 字段及相应的自定义 ID 值,如下例所示。
--form 'id=this/is/my-customid'