> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# PUT (/sessions/{sessionId}/scids/{scid}/data/{pathAndFileName},{type})

> PUT (/sessions/{sessionId}/scids/{scid}/data/{pathAndFileName},{type})

# PUT (/sessions/{sessionId}/scids/{scid}/data/{pathAndFileName},{type})

上传文件。数据可以通过完整上传的方式上传,即在一条消息中发送数据和元数据;也可以通过多块上传的方式上传,即以一系列较小的块发送数据和元数据。只有小于 4 MB 的文件才能作为单条消息发送。类型为 json 的数据不支持多块上传。
这些 URI 的域为 `titlestorage.xboxlive.com`。

* [URI 参数](#ID4EX)
* [授权](#ID4EEB)
* [可选的查询字符串参数](#ID4ERB)
* [必需的请求标头](#ID4ENE)
* [可选的请求标头](#ID4EWF)
* [请求正文](#ID4EZG)
* [HTTP 状态代码](#ID4EEH)
* [响应正文](#ID4EXEAC)

## URI 参数

| 参数 | 类型 | 说明 |
| - | - | - |
| sessionId | string | 要查找的会话的 ID。 |
| scid | guid | 要查找的服务配置的 ID。 |
| pathAndFileName | string | 要访问项的路径和文件名。路径部分(直到并包括最后一个正斜杠)的有效字符包括大写字母 (A-Z)、小写字母 (a-z)、数字 (0-9)、下划线 (*) 和正斜杠 (/)。路径部分可以为空。文件名部分(最后一个正斜杠之后的所有内容)的有效字符包括大写字母 (A-Z)、小写字母 (a-z)、数字 (0-9)、下划线 (*)、点 (.) 和连字符 (-)。文件名不得为空、不得以点结尾,也不得包含两个连续的点。 |
| type | string | 数据的格式。可能的值为 binary 或 json。 |

## 授权

请求必须包含有效的 XBOX LIVE 授权标头。如果不允许调用方访问该资源,该服务将返回 403 Forbidden 响应。如果标头无效或缺失,该服务将返回 401 Unauthorized 响应。

## 可选的查询字符串参数

对于单消息上传,查询字符串参数为:

\| 参数 | 类型 | 说明 |
\| --- | --- | --- | --- | --- | --- |
\| clientFileTime | DateTime | 上次上传该文件的客户端上该文件的日期/时间。 |
\| displayName | string | 应显示给用户的文件名。 |

对于多块上传,查询字符串参数为:

\| 参数 | 类型 | 说明 |
\| --- | --- | --- | --- | --- | --- | --- | --- | --- |
\| clientFileTime | DateTime | 上次上传该文件的客户端上该文件的日期/时间。 |
\| displayName | string | 应显示给用户的文件名。 |
\| continuationToken | string | 上一次上传请求响应中的延续标记。如果这是第一个块,则不应指定此参数。 |
\| finalBlock | bool | 对文件的最后一个块设置为 true。对所有其他块设置为 false。 |

## 必需的请求标头

\| 标头 | 值 | 说明 |
\| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
\| x-xbl-contract-version | 1 | API 协定版本。 |
\| Authorization | XBL3.0 x=\[hash];\[token] | STS 身份验证令牌。STSTokenString 替换为身份验证请求返回的令牌。有关检索 STS 令牌和创建授权标头的更多信息,请参见 Authenticating and Authorizing XBOX LIVE Services Requests。 |

## 可选的请求标头

\| 标头 | 说明 |
\| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
\| If-Match | 指定必须与现有项匹配的 ETag,以完成操作。 |
\| If-None-Match | 指定不得与任何现有项匹配的 ETag,以完成操作。 |

## 请求正文

请求正文包含正在上传的文件内容。对于单消息上传,正文是文件的完整内容。对于多块上传,正文是查询字符串参数中指定的文件部分。

## HTTP 状态代码

服务针对使用此方法对此资源发出的请求,返回本节中的某个状态代码。有关与 XBOX Live 服务一同使用的标准 HTTP 状态代码的完整列表,请参见 [标准 HTTP 状态代码](https://devdocs.xbox.com/zh-CN/reference/live/rest/additional/httpstatuscodes)。

\| 代码 | 原因短语 | 说明 |
\| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
\| 200 | OK | 请求成功。 |
\| 201 | Created | 已创建实体。 |
\| 400 | Bad Request | 服务无法理解格式错误的请求。通常是无效参数。 |
\| 401 | Unauthorized | 请求需要用户身份验证。 |
\| 403 | Forbidden | 不允许该用户或服务发出请求。 |
\| 404 | Not Found | 找不到指定的资源。 |
\| 406 | Not Acceptable | 不支持资源版本。 |
\| 408 | Request Timeout | 请求完成时间过长。 |
\| 500 | Internal Server Error | 服务器遇到意外情况,无法完成请求。 |
\| 503 | Service Unavailable | 请求已被限流,请在客户端重试值(以秒为单位,例如 5 秒后)之后再次发送请求。 |

## 响应正文

如果调用是多块请求且调用成功,该服务将返回一个延续标记以传递给下一个块。

### 响应示例

```cpp theme={null}
{
    "continuationToken":"abcd1234-1111-2222-3333-abcd12345678-1"
}
         
```

## 另请参阅

##### 父主题

[/sessions/{sessionId}/scids/{scid}/data/{pathAndFileName},{type}](https://devdocs.xbox.com/zh-CN/reference/live/rest/uri/storage/uri-sessionssessionidscidssciddatapathandfilenametype)


## Related topics

- [XblMultiplayerSessionReferenceUri](https://devdocs.xbox.com/reference/live/xsapi-c/multiplayer_c/structs/xblmultiplayersessionreferenceuri.md)
- [XblTitleStorageBlobMetadata](https://devdocs.xbox.com/reference/live/xsapi-c/title_storage_c/structs/xbltitlestorageblobmetadata.md)
- [XblMultiplayerSessionReference](https://devdocs.xbox.com/reference/live/xsapi-c/multiplayer_c/structs/xblmultiplayersessionreference.md)
- [XblTitleStorageUploadBlobAsync](https://devdocs.xbox.com/es/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageuploadblobasync.md)
