You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将本地文件以CRAM格式上传至Google Cloud Storage并关联名称标签?

本地CRAM文件上传至Google Cloud Storage并触发分析的实现方案

嘿,我来帮你搞定这个测试任务的核心问题!先给你捋清楚步骤,顺便修正原代码里的小细节,再一步步教你上传带名称标签的CRAM文件,最后说说怎么触发分析处理函数。

首先,先修正你给出的代码里的两个小问题:

  • client.get_bucket()的参数不能带gs://前缀,只需要传桶的名称就行
  • 获取manifest.json内容时,原代码少了download_as_text()方法,不然没法读取文件内容

修正后的基础代码如下:

import json
from google.cloud import storage

# 初始化GCS客户端
client = storage.Client()
# 正确传入桶名(去掉gs://前缀)
bucket = client.get_bucket('hmf-dr-123')
# 获取并解析manifest.json
manifest_blob = bucket.get_blob('manifest.json')
if manifest_blob:
    data = json.loads(manifest_blob.download_as_text())
    print("manifest.json内容加载成功")
else:
    print("未找到manifest.json文件")

接下来就是上传本地CRAM文件并添加名称标签的核心步骤:

1. 上传本地CRAM文件到GCS

你可以自定义GCS上的对象路径,比如把标签信息(比如患者ID、样本类型)包含在路径里,方便后续识别;也可以单独给GCS对象设置标签属性。

# 本地CRAM文件的绝对路径
local_cram_file = '/Users/you/local_data/sample_001.cram'
# GCS上的对象名称(这里把标签信息融入路径,方便分类)
gcs_target_path = 'labeled_cram/patient_001/tumor_sample.cram'

# 创建Blob对象,代表GCS上的文件
cram_blob = bucket.blob(gcs_target_path)

# 上传本地文件到GCS
cram_blob.upload_from_filename(local_cram_file)
print(f"CRAM文件已成功上传到:gs://{bucket.name}/{gcs_target_path}")

2. 给CRAM文件添加名称标签(GCS对象标签)

如果需要给文件设置独立的名称标签(不是路径里的,而是GCS对象的元数据标签),可以用set_labels()方法:

# 定义你需要的名称标签,比如患者ID、样本类型等
name_labels = {
    'patient_id': '001',
    'sample_type': 'tumor',
    'file_format': 'CRAM'
}

# 给上传的CRAM文件设置标签
cram_blob.set_labels(name_labels)

# 验证标签是否设置成功
print("当前CRAM文件的标签:", cram_blob.labels)

3. 触发对应的分析处理函数

如果你的分析函数是Google Cloud Functions(最常用的场景),通常可以直接在GCS存储桶上设置最终创建事件触发器——只要有新的CRAM文件上传完成,就会自动触发函数执行。

如果需要手动触发(比如测试阶段),可以通过HTTP请求调用函数的API:

import requests

# 替换成你的Cloud Function的URL
function_endpoint = 'https://us-central1-your-project-id.cloudfunctions.net/your-analysis-function'

# 传递必要的参数给分析函数,比如存储桶名和文件路径
trigger_payload = {
    'bucket': bucket.name,
    'cram_file_path': gcs_target_path
}

# 发送请求触发函数
response = requests.post(function_endpoint, json=trigger_payload)
if response.status_code == 200:
    print("分析处理函数已成功触发!")
else:
    print(f"触发失败,状态码:{response.status_code},错误信息:{response.text}")

内容的提问来源于stack exchange,提问作者shaharnakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:07:38