写入文件
请求体成为文件的全部内容,并一次性替换到位:读取方看到的要么是旧内容,要么是新内容,绝不会各一半。请求体边收边转给沙箱,一次一段:它本身没有大小限制(以沙箱的磁盘为限),守护进程只持有其中有限的一段,从不持有全部。请求体在达到其长度之前就结束(调用方离开了)时,不会替换任何东西。带 offset 时,则从该位置起把请求体原地写入文件,文件的其余部分保持不变:分段写入文件、修改文件的一部分都靠这种方式;请求体提前结束时,已收到的部分会被写入。缺少的上级目录会自动创建。不检查 Idempotency-Key。路径都是绝对路径。操作以运行命令的用户身份执行,或以 user 的身份执行:该用户无权做的操作会被拒绝 (403),创建的东西归该用户所有。
所需权限范围:files,或带 files 的沙箱令牌。
https://api.glac.ai/v1/sandboxes/{id}/files授权
路径参数
查询参数
请求头参数
请求体OCTET-STREAM可选
文件内容,长度不限,边收边转。
Returns
204
已写入。
400
请求不符合本调用的要求。missing_path:缺少路径;invalid_path:路径不是绝对路径,或者文件系统不接受该路径;name_too_long:路径中某个名称超出了文件系统允许的长度(255 字节);invalid_field:某个字段或查询参数类型错误或超出范围;unknown_parameter:查询中有本调用不接受的参数;no_such_user:user 不是沙箱中的用户;malformed_request:内容在达到其长度之前就结束了,或者分块格式不对。
401
missing_api_key, invalid_api_key, expired_api_key, invalid_token.
403
凭据无权执行此操作。token_scope:沙箱令牌缺少所需的权限范围;permission_denied:执行该操作的用户没有权限:包括在该用户不能写的目录中新建文件,以及 /proc 或 /sys 下的路径。spend_limit_reached:沙箱因达到支出上限而被冻结;它会连同数据一起休眠,直到上限提高。
404
请求中指定的对象不存在。sandbox_not_found:沙箱不存在;file_not_found:通往该路径的中途有一级指向不存在的地方:比如指向空处的符号链接。
409
某个对象的状态不允许此操作。is_a_directory:路径是一个目录;not_a_directory:路径中途的某一级不是目录;read_only:文件系统以只读方式挂载;symlink_loop:路径中途的符号链接形成了循环;file_busy:有程序正从该文件运行,无法原地写入;not_a_regular_file:路径上是管道、套接字或设备;sandbox_too_old:给出了 offset,而沙箱创建于节点支持按位置写入之前;sandbox_failed:沙箱处于 failed 状态。
413
空间不足。disk_full:磁盘已满。
503
暂时无法处理,没有做任何操作。body_memory_full:节点同时持有的调用请求体已达上限,5 秒内没有腾出空间;请稍后重试。
default
其他任何失败,格式相同。internal (500):节点出错;错误信息不会多说,节点日志中以请求的 id 记录了原因。unavailable(503,可重试):no_capacity,节点的网络槽位都已占用;memory_full,调用需要启动的虚拟机(创建、唤醒、从磁盘启动、恢复、回滚、构建)在宿主机内存中放不下(还要算上已承诺给其上运行的虚拟机的内存),也没有暂停或空闲的虚拟机可以让其休眠来腾出空间(节点的 memory);drive_full,调用需要构建模板,而节点的数据盘没有空间(节点的 drive);unavailable,节点正在关闭、沙箱 10 分钟后仍处于 starting、沙箱没有响应,或者沙箱正在迁到本节点(带 Retry-After: 1);fenced,节点的租约隔离了该沙箱 (Node.lease)。moved (409):沙箱已迁到另一个节点,由 to 指明。