Skip to content

Repository files navigation

EasyUpload

English | 简体中文

EasyUpload is a Flutter application for moving photos and videos from an Android phone to a Windows PC over a local network.

It is built for a familiar problem: when a phone has a large media library, connecting it over USB/MTP can make File Explorer slow or unresponsive before a transfer even starts. EasyUpload reads the phone media library on demand and transfers only the items you select.

Status

This repository contains an active MVP. Android and Windows release builds are available from the source tree; the core upload and receiver flows are covered by automated tests. Real-device testing across more Android vendors and network conditions is still in progress.

Features

  • Browse Android photos and videos in newest-first order, with media-type filters, thumbnails, file-size labels, and lazy loading.
  • Upload original files without compression or transcoding.
  • Resume interrupted transfers. Chunks are 4 MiB by default and grow to 8/16 MiB for larger files; the phone asks the PC for the committed offset before continuing.
  • Upload up to six files in parallel. The default is three concurrent uploads and can be adjusted on the phone.
  • Pair by scanning a QR code shown by the Windows app, with manual address/code entry as a fallback.
  • Keep concurrent phones separate. A stable internal device ID scopes resumable-transfer state; a user-editable device name becomes the single folder name below the selected library root.
  • Choose and manage the Windows media library: search, filter by device/type/date, sort, scan the folder, preview images, open videos with the system player, and reveal files in Explorer.
  • Store the Windows library index in SQLite. Image thumbnails are cached in the background; video thumbnails use Windows Shell APIs.
  • Show live receiving status on Windows: device, file, progress, transfer rate, ETA, and recent events.
  • Keep an Android upload alive more reliably while the app is backgrounded or the screen is locked by using a dataSync foreground service after the user starts a transfer.
  • Review uploaded media on Android, select the current filtered result, and move verified photos or videos to Android system trash after a system confirmation.

How it works

Android media library
        |
        | select photos / videos
        v
EasyUpload Android -- QR pairing + resumable HTTP chunks --> EasyUpload Windows
        |                                                   |
        | mark uploaded after COMMITTED + SHA-256           +-- staging + integrity check
        v                                                   +-- <library root>/<device name>/<file>
Android system trash confirmation                           +-- SQLite index + thumbnails
  1. Choose a library root on Windows and start the LAN receiver.
  2. Scan the Windows QR code from Android, or enter the address and pairing code manually.
  3. Select photos or videos on the phone and start an upload.
  4. Windows writes to staging first. It responds with COMMITTED only after it receives the complete file, verifies SHA-256, and archives the original.
  5. The phone records the item as uploaded. Cleanup is optional and always requires Android's system confirmation; the PC copy is never removed by this action.

Quick start

  1. Run easyupload.exe on Windows.
  2. In Storage Settings, choose an empty folder or a folder dedicated to this media library.
  3. Open LAN Receiver and start it. If Windows Firewall prompts, allow the app on private networks only.
  4. Install app-arm64-v8a-release.apk on Android (suitable for most current phones), and connect the phone and PC to the same LAN.
  5. In Connect to PC, scan the QR code. Then grant media access in Photos, select media, and upload.
  6. When the transfer is complete, use Uploaded if you want to move verified items to Android system trash.

Build artifacts are written to:

  • build\app\outputs\flutter-apk\app-arm64-v8a-release.apk
  • build\app\outputs\flutter-apk\app-armeabi-v7a-release.apk
  • build\app\outputs\flutter-apk\app-x86_64-release.apk
  • build\windows\x64\runner\Release\easyupload.exe

Security and data handling

  • Transfers and archives stay on the local network and in the Windows folder selected by the user. There is no account, cloud storage, or remote-sync service.
  • Windows requires the temporary six-digit pairing code currently shown by its receiver before accepting a transfer.
  • Files are written to staging and verified with SHA-256 before the phone can mark them as uploaded.
  • Android cleanup is limited to items confirmed by the PC and goes through Android's system trash confirmation flow.
  • The current MVP uses HTTP plus a temporary pairing code. It does not use TLS yet, so use it only on a trusted home or office LAN—not on public Wi-Fi.

Build from source

The project is developed with Flutter 3.47.2 / Dart 3.13.2. Building Windows also requires Visual Studio C++ desktop build tools; Android builds require API 36 and NDK 28.2.13676358 in this development environment.

# Analyse and test
.\tool\flutter.ps1 analyze
.\tool\flutter.ps1 test

# Android release APKs, split per ABI
.\tool\flutter.ps1 build apk --release --split-per-abi

# Windows release build
.\tool\flutter.ps1 build windows --release

See docs/开发与构建.md for local toolchain notes and docs/MVP-任务与进度.md for implementation status.

Technology

  • Flutter / Dart shared UI, state, and transfer protocol
  • Android MediaStore, system trash requests, ZXing QR scanning, and a foreground dataSync service
  • Windows Flutter runner, HttpServer, SQLite, Shell thumbnails, and Explorer integration
  • LAN HTTP, file-size-aware 4/8/16 MiB chunks, configurable file-level concurrency, resumable offsets, SHA-256 verification, and a SQLite media index

Roadmap

  • mDNS discovery
  • TLS, certificate fingerprint confirmation, and paired-device revocation
  • Broader device/network regression testing for background upload and resumable transfers
  • Windows batch operations, recycle-bin support, exports, and a resumable library migration
  • EXIF details and privacy-preserving exports
  • Local model-based classification and content search

Documentation

About

Transfer photos and videos from Android to Windows over a local network.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages