禁止将文件上传到存储桶



我有一个简单的脚本,用于将.txt文件上传到名为"training data"的Suabase bucket中。bucket已公开,我确保包含必要的存储/对象策略以允许访问。我知道其他人也遇到了以下错误,我也是,但我设法使用策略修复了它:

'new row violates row-level security policy for table "objects"'

我现在的问题是,它给了我一个不同的错误,据我所见,以前没有人遇到过:

storage3.utils.StorageException: {'statusCode': 400, 'error': 'Key is not present in table "buckets".', 'message': 'insert or update on table "objects" violates foreign key constraint "objects_bucketId_fkey"'}

我不知道为什么它告诉我我的bucket是一个表,它需要一个唯一的标识符密钥。我该如何解决这个问题?我的代码如下:

from supabase import create_client
from dotenv import load_dotenv
import os
load_dotenv()
url = os.environ.get("DEPLOY_URL")
key = os.environ.get("DEPLOY_KEY")

supabase = create_client(url, key)
data = supabase.table("Blog Data").select("*").execute()
file = "dzonescrape\dzonescrape\spiders\test.txt"
# data = supabase.storage().from_("public/training-data").download("test.txt")
# print(data)
supabase.storage().from_("public/training-data").upload("test.txt", file)

仅供参考,我测试了下载手动上传的文件,它是有效的,所以只是上传给了我问题。这是我的插入对象策略:

CREATE POLICY "Make inserting training data publicly available (INSERT)" ON "storage"."objects"
AS PERMISSIVE FOR INSERT
TO public
WITH CHECK (bucket_id = 'training-data')

尝试更改您的bucket名称:

supabase.storage().from_("training-data").upload("test.txt", file)

我在Dart:上检查了我的代码

Future<StorageResponse> _uploadFile() async {
final supabase = Supabase.instance.client;
const file = '/Users/igdmitrov/DEV/Test.txt';
final response = await supabase.storage
.from('training-data')
.upload('text.txt', File(file));
print(response.error);
return response;
}

它适用于政策:

CREATE POLICY "Give users authenticated access to folder 1ov7tml_0" ON storage.objects FOR INSERT TO public WITH CHECK (bucket_id = 'training-data');
CREATE POLICY "Give users authenticated access to folder 1ov7tml_1" ON storage.objects FOR SELECT TO public USING (bucket_id = 'training-data');

我遇到了这个问题,并用这种方式解决了它。

转到存储>政策>storage.objects>下的其他策略;新政策

然后从屏幕截图上传策略,您将能够上传。在此处输入图像描述

最新更新