# Upload File (Multipart)

Upload a local file straight to a Cloud Phone (legacy multipart flow).
- **Preconditions**: the phone must be powered on and not held by another member. The upload code obtained from the signed-URL step is single-use.
- **Completion**: the response only confirms the Local API accepted the transfer. **No task id and no polling state are exposed**, so progress cannot be observed.
- **Use instead**: `/api/cloudphone/upload/file/signedUrl` → `PUT` → `/api/cloudphone/upload/file` → `/api/cloudphone/upload/file/result` when you need observable progress and retry handling.
- **Note**: this path is not the same operation as `/cloudphone/uploadFile` on the Open API, which registers an already-uploaded object.

Documented business errors: `33401`, `33419`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.

Endpoint: POST /api/cloudphone/uploadFile
Version: 2026-09-05

## Request fields (multipart/form-data):

  - `id` (string, required)
    Cloud phone ID
    Example: 1661515884160372

  - `file` (string, required)
    File to upload
    Example: file://D:\application\apifox\LICENSE.electron.txt

  - `uploadDest` (string, required)
    Upload destination directory
    Example: /Download

## Response 200:

  - `200` (unknown)
    The Local API accepted the direct upload and returns an empty JSON object.

