使用Pandas上传CSV到GCP后,如何修改Content-Type为text/csv?
解决GCS上传CSV文件Content-Type为application/octet-stream的问题
你的问题出在错误地将Content-Type放到了blob的metadata字段中,而GCS的文件Content-Type是blob自身的顶级属性,不属于metadata范畴。另外,也可以直接在上传时就指定正确的Content-Type,避免后续修改。
方案一:上传时直接指定Content-Type(推荐)
利用pandas的to_csv方法支持的storage_options参数,在上传阶段就设置正确的Content-Type,一步到位:
df = pd.DataFrame.from_dict(json_data) df.to_csv( "gs://bucket/file_name", index=False, storage_options={"content_type": "text/csv"} )
方案二:上传后修正Content-Type属性
如果需要保留上传后修改的流程,要修改blob的content_type属性而非metadata:
df = pd.DataFrame.from_dict(json_data) df.to_csv("gs://bucket/file_name", index=False) s_client = storage.Client() bucket = s_client.bucket("bucket") blob = bucket.get_blob("file_name") metageneration_match_precondition = blob.metageneration # 直接修改content_type属性 blob.content_type = "text/csv" blob.patch(if_metageneration_match=metageneration_match_precondition)
或者使用update方法简化操作:
blob.update( {"content_type": "text/csv"}, if_metageneration_match=metageneration_match_precondition )
关键说明
GCS的Content-Type是控制文件HTTP头部的核心属性,存储在blob的顶级字段中,而metadata是用户自定义的附加键值对,两者完全独立。你之前的代码修改的是metadata,自然不会影响文件的Content-Type。
内容的提问来源于stack exchange,提问作者Md Parvez Alam
相关产品推荐
相关产品推荐

