首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >支持不允许将文件上载到存储桶

支持不允许将文件上载到存储桶
EN

Stack Overflow用户
提问于 2022-07-21 17:29:28
回答 1查看 895关注 0票数 1

我有一个简单的脚本,可以将一个.txt文件上传到一个名为“培训-数据”的Supabase桶中。存储桶是公开的,为了允许访问,我确保包含了必要的存储/对象策略。我知道其他人遇到了以下错误,就像我一样,但是我成功地使用策略修复了它:

代码语言:javascript
运行
复制
'new row violates row-level security policy for table "objects"'

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

代码语言:javascript
运行
复制
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"'}

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

代码语言:javascript
运行
复制
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)

FYI,我测试了手动上传的下载文件,它可以工作,所以只是上传给我带来了问题。以下是我的插入对象策略:

代码语言:javascript
运行
复制
CREATE POLICY "Make inserting training data publicly available (INSERT)" ON "storage"."objects"
AS PERMISSIVE FOR INSERT
TO public

WITH CHECK (bucket_id = 'training-data')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-24 19:42:42

尝试更改桶名:

代码语言:javascript
运行
复制
supabase.storage().from_("training-data").upload("test.txt", file)

我查了我的密码:

代码语言:javascript
运行
复制
  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;
  }

它与政策一起工作:

代码语言:javascript
运行
复制
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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73070429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档