Skip to main content

PushPath · Upload

This tool on every surface: CLI · MCP · Python · JavaScript · Go · Java · .NET

Put a file from this machine where the device keeps downloads, so an app's file picker finds it: Android's shared Download folder, or on iOS an app's own Documents folder, which the Files app shows under On My iPhone. These call app_upload.

PushPath​

func (d *Device) PushPath(ctx context.Context, local, devicePath, app string) (*Transfer, error)

PushPath sends a local file or folder to a path on the device and reads every file's size back there. On Android devicePath is absolute (/sdcard/..., /data/local/tmp/...), or with app it is a path in that app's private data, which needs a debuggable build. On iOS it is a path in an app's data container — app, or the one in front when app is empty.

Upload​

func (d *Device) Upload(ctx context.Context, path string, opts *TransferOptions) (*Transfer, error)

Upload puts a file from this machine where the device keeps downloads, so an app's file picker finds it. On Android that is the shared Download folder, and the file is indexed in MediaStore — which is what the picker reads — and read back there. On an iOS simulator it is an app's own Documents folder, which the Files app shows under On My iPhone: the app named in opts, or the one in front. On a real iPhone it is the same folder, through CoreDevice, and the upload is confirmed by reading its bytes back.

A relative path is this process's: mobium pipe resolves it before the daemon sees it.

Examples​

Send a file where the device keeps downloads​

sent, err := dev.Upload(ctx, "invoice-42.txt", nil)
if err != nil {
return err
}
fmt.Println(sent.Where, sent.Bytes, sent.Checked)

The same call from the command line, mobium upload invoice-42.txt, printed on an Android 15 emulator:

uploaded …/invoice-42.txt to Download/invoice-42.txt (24 bytes) — confirmed by its size read back on the device, and MediaStore listing it

After mobium upload invoice-42.txt, the Files Demo's Upload a file opened the system picker, the file was in it, and the line under the button says the name, size and first line of what arrived — on an Android 15 emulator

After mobium upload invoice-42.txt, the Files Demo's Upload a file opened the system picker, the file was in it, and the line under the button says the name, size and first line of what arrived — on an Android 15 emulator

Send a folder to a path on the device​

sent, err := dev.PushPath(ctx, "seed", "/sdcard/seed", "")
if err != nil {
return err
}
fmt.Println(sent.Files, sent.Checked)

The same call from the command line, mobium upload ./seed --device-path /sdcard/seed, printed on an Android 15 emulator:

uploaded …/seed to /sdcard/seed (a folder of 2 files, 8 bytes) — confirmed by each of its 2 files' sizes read back on the device