Google api 如何使用谷歌API在谷歌存储上创建一个空文件夹?

Google api 如何使用谷歌API在谷歌存储上创建一个空文件夹?,google-api,google-cloud-storage,Google Api,Google Cloud Storage,如何使用谷歌API在谷歌存储上创建一个空文件夹?(假设/是路径分隔符。)谷歌云存储没有文件夹或子目录。但是,有一些人支持模仿它们。对于某些背景来说,gsutil是一本不错的读物 谷歌云存储对象是一个扁平的名称空间,但包括gsutil和谷歌云存储UI在内的许多工具都会产生一种分层文件树的错觉 创建空子目录的幻觉有两种广泛使用的约定: (推荐)创建以尾部斜杠结尾的对象。例如,要在bucket的根目录中创建一个名为foo的子目录,可以创建一个名为foo/的空对象(大小为0) (旧版)创建一个对象,并在

如何使用谷歌API在谷歌存储上创建一个空文件夹?(假设
/
是路径分隔符。)

谷歌云存储没有文件夹或子目录。但是,有一些人支持模仿它们。对于某些背景来说,gsutil是一本不错的读物

谷歌云存储对象是一个扁平的名称空间,但包括gsutil和谷歌云存储UI在内的许多工具都会产生一种分层文件树的错觉

创建空子目录的幻觉有两种广泛使用的约定:

  • (推荐)创建以尾部斜杠结尾的对象。例如,要在bucket的根目录中创建一个名为
    foo
    的子目录,可以创建一个名为
    foo/
    的空对象(大小为0)

  • (旧版)创建一个对象,并在名称后面附加
    \u$folder$
    。例如,要在bucket的根目录中创建一个名为
    foo
    的子目录,可以创建一个名为
    foo\u$folder$
    的空对象(大小为0)


  • 请注意,大多数工具和实用程序现在都在使用方法1。方法2的使用频率较低。

    @SheRey-查看通过GCS web界面创建的文件夹,内容类型设置为
    application/x-www-form-urlencoded;charset=UTF-8
    ,但这并不重要。以下是python中对我有用的内容:

    # pip install google-cloud-storage
    
    from google.cloud import storage
    
    gcs_client = storage.Client(project='some_project')
    bucket = gcs_client.get_bucket('some_bucket')
    blob = bucket.blob('some/folder/name/')
    
    blob.upload_from_string('', content_type='application/x-www-form-urlencoded;charset=UTF-8')
    

    谢谢你的提问和选择的最佳答案。 以下是我编写的代码片段: Python方法:

    def create_folder(bucket_name, destination_folder_name):
        storage_client = storage.Client()
        bucket = storage_client.get_bucket(bucket_name)
        blob = bucket.blob(destination_folder_name)
    
        blob.upload_from_string('')
    
        print('Created {} .'.format(
            destination_folder_name))
    
    调用该方法的主代码:

    folder = create_folder(bucket_name, 'test-folder/')
    

    Node.js
    +
    @googlecloud/storage@^2.5.0

    您只需要指定一个目标,如:
    /
    模式

    例如,我使用
    uuid
    作为我的文件夹名来模拟每个用户都有一个文件夹来存储他们自己的文件

    it('应该正确上传文件并创建文件夹',async()=>{
    const myStorage=new Storage({keyFilename:path.resolve(uu dirname,'../../../...gcp/cloud Storage admin.json'));
    const bucket=myStorage.bucket('ez2on');
    常量文件名='mmczblsq.doc';
    const filePath=path.resolve(_dirname,`../../../../tmp/${fileName}`);
    const uuid=faker.random.uuid();
    等待bucket.upload(文件路径{
    目标:`${uuid}/${fileName}`,
    gzip:是的,
    元数据:{
    cacheControl:“公共,最大年龄=31536000”
    }
    });
    });
    
    结果是:

    以下是
    @googlecloud/storage
    的API文档:

    Go
    +
    cloud.google.com/Go/storage

    主程序包
    进口(
    “cloud.google.com/go/storage”
    “上下文”
    “fmt”
    “github.com/google/uuid”
    “google.golang.org/api/option”
    “io”
    “日志”
    “操作系统”
    )
    func main(){
    ctx:=context.Background()
    选项:=option.ClientOption(
    option.WithCredentialsFile(os.Getenv(“CredentialsFile”),
    )
    客户端,错误:=storage.NewClient(ctx,opts)
    如果错误!=零{
    log.Fatalf(“%v”,err)
    }
    文件名:=“mmczblsq.doc”
    文件路径:=fmt.Sprintf(“./tmp/%s”,文件名)
    文件,错误:=os.Open(文件路径)
    如果错误!=零{
    log.Fatalf(“%v”,err)
    }
    延迟文件。关闭()
    uuidIns,err:=uuid.NewUUID()
    如果错误!=零{
    log.Fatalf(“%v”,err)
    }
    对象:=fmt.Sprintf(“%s/%s”,uuidIns,文件名)
    log.Printf(“对象名称:%s”,对象)
    wc:=client.Bucket(“ez2on”).Object(Object.NewWriter(ctx)
    如果3;,err:=io.Copy(wc,file);err!=nil{
    log.Fatalf(“%v”,err)
    }
    如果错误:=wc.Close();错误!=nil{
    log.Fatalf(“%v”,err)
    }
    }
    
    标准输出:

    ☁  上传[主机]⚡  CredentialsFile=/Users/ldu020/workspace/github.com/mrdulin/nodejs gcp/.gcp/cloud-storage-admin.json go运行main.go
    2019/07/08 14:47:59对象名称:532a2250-a14c-11e9-921d-8a002870ac01/mmczblsq.doc
    
    检查google云平台控制台中的文件:


    如果您使用的是
    java
    SDK,请尝试以下方法

    Blob folderCreated=bucket.create(文件夹名称+“/”,“”.getBytes());
    
  • 文件夹名称
    应以“/”结尾
  • 上载空字节
  • 在命名要写入的对象时,我通过“创建”文件夹来完成

    storage_client = storage.Client()
    bucket = storage_client.bucket(bucket_name)
    
    blob = bucket.blob("new_folder_name/destination_blob_name")
    
    blob.upload_from_filename(source_file_name)
    

    我试图从CircleCI实例在Google存储桶上创建一个唯一的子目录。下面是我如何使用gsutil实现的。我创建了一个虚拟文件。我还使用斜杠将文件夹名附加到目标存储桶名

    Usage: gsutil cp OBJECT_LOCATION gs://DESTINATION_BUCKET_NAME/
    
    sudo gsutil cp ~/some-path/dummyFile.txt gs://my-bucket/unique-folder-name/
    

    这个答案已经有一年多的历史了,所以有可能事情已经改变了。如果没有,有人能确切地告诉我如何(最好使用gsutil)创建一个名称以“/”结尾的空对象吗?我希望创建显式文件夹用于gcsfuse。谢谢。如果我在本地创建一个空文件,并尝试像这样上载它:“gsutil cp dummy_file gs:///”它只会在gs:///dummy_file处创建一个空对象。。。如果我试图将它复制到一个名为gs:///\u$folder$的对象中,我会得到一个名为gs:///\u$@jterrace的对象。信息是最新的:仍然无法使用gsutil创建目录占位符对象。好的,很高兴知道——您能提供一个如何使用API/端点进行此操作的示例吗?(如果可能,可以使用原始https或python)查看有关将图像上载到google存储的google教程。感谢并祝贺你,你已经完成了谷歌认为“不可行”的任务。你不需要用这种方式创建所有的中间目录吗?首先,对
    some
    、than
    some/folder
    、than
    some/folder/name
    进行测试,效果良好。蟒蛇3.8。谢谢