dbfs api 上传必须用 rest,c# 无官方 sdk,需自行封装 http 请求;须用 post 方法、authorization bearer token(含 files.read/write 权限)、path 以 /dbfs/ 开头;小文件 base64 编码直传,大文件需多段上传。

DBFS API 上传必须用 REST,C# 没有官方 SDK 支持
直接调用 /api/2.0/dbfs/put 是唯一可靠路径。Databricks 官方不提供 C# SDK,所有 .NET 方案都得自己封装 HTTP 请求——别找 NuGet 包,不存在“Databricks.Client”这种东西,搜到的第三方库基本过时或不维护。
常见错误是试图复用 Azure Blob SDK 或本地 FileStream 直传:DBFS 不接受裸二进制流,必须按 API 要求分块(chunk)+ base64 编码 + 显式指定 overwrite 参数。
- 必须用
POST方法,不是PUT - 请求头必须含
Authorization: Bearer <token></token>,且 token 需有 workspace 级权限(clusters.manage不够,要files.read和files.write) -
path参数值必须以/dbfs/开头,比如上传到/tmp/data.csv,实际传/dbfs/tmp/data.csv - 文件大于 100MB 必须走多段上传(
/upload+/complete),单次put仅限小文件
小文件上传:用 HttpClient 发送 base64 编码体
这是最常用场景(StringContent 直接传原始字节——API 会返回 400 Bad Request 并提示 “invalid base64”。
示例关键片段:
var json = new { contents = Convert.ToBase64String(fileBytes), overwrite = true };
var payload = JsonSerializer.Serialize(json);
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://<workspace>.cloud.databricks.com/api/2.0/dbfs/put", content);
-
fileBytes必须是完整文件内容(File.ReadAllBytes()可行,但大文件慎用) -
overwrite = true不加会报RESOURCE_ALREADY_EXISTS - 路径中的空格、中文必须 URL 编码,比如
/dbfs/My%20Folder/file.json - 响应体为空(
200 OK即成功),不要依赖返回内容做逻辑判断
大文件上传失败?必须切片 + 临时 upload_id
超过 100MB 就不能走 /dbfs/put,否则超时或被网关截断。正确流程是三步:POST /api/2.0/dbfs/upload(获取 upload_id)→ 分块 PUT 到临时地址 → POST /api/2.0/dbfs/complete 提交。
1、请上传下载到的淘宝客系统安装包并上传到空间根目录中进行解压,解压后将网站文件移动到根目录的位置,然后访问 /install 进行安装。您也可以在本地解压,并以二进制方式将程序上传至您的网站空间。 2、同意启科网络电子商务系统安装协议进入下一步。 3、如果系统检测环境通过,则会提示输入您的数据库服务器地址(一般为本机,即127.0.0.1或者localhost)、数据库账号、数据库密码、数据库名
容易踩的坑:
- 分块大小必须是 10MB 的整数倍(官方要求),最后一块可不足 10MB
-
upload_id有效期仅 1 小时,且每个 ID 只能用一次 - 分块
PUT地址由第一步响应返回,形如https://<workspace>.cloud.databricks.com/uploads/<upload_id>/part-00000</upload_id></workspace>,不是拼出来的 - 完成请求的
parts数组必须严格按顺序包含所有分块的etag(即分块上传响应头里的Etag值)
Token 权限和网络问题比代码更常导致失败
90% 的 “403 Forbidden” 或 “401 Unauthorized” 不是代码写错,而是 token 权限不足或过期。Databricks 的 token 必须在对应 workspace 的 User Settings → Access Tokens 页面生成,不能复用其他环境的 token。
本地调试时还常遇到:
- 公司代理拦截
Authorization头(尤其企业网络),抓包看请求是否根本没发出去 - Workspace URL 写成
https://adb-xxx.azuredatabricks.net(旧域名),新 workspace 统一用https://<number><region>.cloud.databricks.com</region></number> - 误把 DBFS 路径当成本地路径,比如传
C:\data.csv进path字段,API 会静默创建同名目录
真正卡住的地方往往不在 base64 编码逻辑,而在 token 生效范围、workspace 域名拼写、以及上传路径里那个容易被忽略的 /dbfs/ 前缀。





