External S3: large file (re)upload results in upload connection error
- Dominant language
- Kotlin
- Stars
- 5.6k
- Forks
- 2k
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 92
Description
### ⚠️ Before posting ⚠️
- [x] This is a **bug**, not a question or an enhancement.
- [x] I've [searched for similar issues](https://github.com/nextcloud/android/issues) and didn't find a duplicate.
- [x] I've written a clear and descriptive title for this issue, not just "Bug" or "Crash".
- [x] I agree to follow Nextcloud's [Code of Conduct](https://nextcloud.com/contribute/code-of-conduct/).
### Steps to reproduce
1. create a large file (e.g a 100MB video)
2. upload the file from android client to **an external S3 folder**
3. reupload the same file from android client -> fails with connection error
### Expected behaviour
successful reupload, no error on app
### Actual behaviour
Connection error displayed in Uploads section of the app (after 100% upload). The file is uploaded successfully though
### Android version
15
### Device brand and model
Fairphone Gen6
### Stock or custom OS?
Stock
### Nextcloud android app version
3.35.2
### Nextcloud server version
32.0.5.0
### Using a reverse proxy?
I don't know
### Android logs
_No response_
### Server error logs
```bash
```
### Additional information
Folder is hosted on external files on a S3 server (garage) on a home internet connection with fast down, slow uplink.
**On the web application the re-upload succeeds.**
I suspect the timeout settings are different on web / android. After the full upload the backend triggers a GET of the existing video file which takes 3min (slow uplink) to succeed before it executes the PUT.
External Files settings:
* multipart copy **deactivated**
* path style activated
* legacy auth v2 deactived
```
# Webinterface upload of already existing file [WORKING]:
garage_s3 | 2026-02-19T10:56:52.348853Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:43966 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T10:56:52.394129Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:43966 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket?versioning
garage_s3 | 2026-02-19T10:56:52.468786Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:43966 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T10:56:52.891325Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:43970 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T10:56:52.937044Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:43970 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4
// --- conflict resolution on web interface - upload new file
garage_s3 | 2026-02-19T10:57:03.089737Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:50888 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T10:57:03.098849Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:50894 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T10:57:03.133607Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:50888 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4
garage_s3 | 2026-02-19T10:57:03.143382Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:50894 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T10:57:20.151673Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T10:57:20.197166Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T10:57:20.311419Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&prefix=VID.mp4%2F&max-keys=1
garage_s3 | 2026-02-19T10:57:20.357564Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4/
garage_s3 | 2026-02-19T10:57:20.358162Z INFO garage_api_common::generic_server: Response: error 404 Not Found, Key not found
garage_s3 | 2026-02-19T10:57:20.490956Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59850 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/VID.mp4
// --- slow because of uplink limitation
garage_s3 | 2026-02-19T10:59:04.520997Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) POST /nextcloud-bucket/VID.mp4?uploads
garage_s3 | 2026-02-19T10:59:05.216212Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) PUT /nextcloud-bucket/VID.mp4?partNumber=1&uploadId=67d32da828a3bdf7b6ca7c64fb3e8d57afc184a5ed11285f95658f820042fa6e
garage_s3 | 2026-02-19T10:59:30.927267Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) POST /nextcloud-bucket/VID.mp4?uploadId=67d32da828a3bdf7b6ca7c64fb3e8d57afc184a5ed11285f95658f820042fa6e
garage_s3 | 2026-02-19T10:59:30.984876Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4
garage_s3 | 2026-02-19T10:59:31.029204Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&prefix=VID.mp4%2F&max-keys=1
garage_s3 | 2026-02-19T10:59:31.074184Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:59840 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4/
garage_s3 | 2026-02-19T10:59:31.074847Z INFO garage_api_common::generic_server: Response: error 404 Not Found, Key not found
garage_s3 | 2026-02-19T10:59:31.928668Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:43226 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T10:59:31.974708Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:43226 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket?versioning
garage_s3 | 2026-02-19T10:59:32.024018Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:43226 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
result: successful upload on webinterface, no error msg
# Upload with android app [UPLOAD ERROR]
garage_s3 | 2026-02-19T11:01:43.767890Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:52514 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:01:43.814283Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:52514 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket?versioning
garage_s3 | 2026-02-19T11:01:44.039441Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:52514 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:01:44.400690Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:52518 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:01:44.444850Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:52518 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:01:47.751720Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:51428 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:01:47.797210Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:51428 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:01:48.191809Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:51442 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:01:48.237515Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:51442 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:01:48.683772Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:51448 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:01:48.729514Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:51448 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:01:56.647815Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:34758 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:01:56.692371Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:34758 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:01:57.197538Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:34768 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:01:57.243525Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:34768 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4
/-- conflict resultion on app - reupload local version
garage_s3 | 2026-02-19T11:02:02.249542Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:34770 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:02:02.295038Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:34770 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:02:03.094929Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:34782 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:02:03.139062Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:34782 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:02:10.511900Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:46176 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:02:10.557636Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:46176 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:02:16.530758Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56800 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:02:16.575120Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56800 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:02:20.851165Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket
garage_s3 | 2026-02-19T11:02:20.897083Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&delimiter=%2F&prefix=
garage_s3 | 2026-02-19T11:02:21.012729Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&prefix=VID.mp4%2F&max-keys=1
garage_s3 | 2026-02-19T11:02:21.059340Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4/
garage_s3 | 2026-02-19T11:02:21.060216Z INFO garage_api_common::generic_server: Response: error 404 Not Found, Key not found
garage_s3 | 2026-02-19T11:02:21.217087Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56826 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/VID.mp4
/-- Connection error on app in Uploads section around 2026-02-19T11:03:30
/-- s3 is completing the GET request
garage_s3 | 2026-02-19T11:04:07.180588Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) POST /nextcloud-bucket/VID.mp4?uploads
garage_s3 | 2026-02-19T11:04:07.912136Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) PUT /nextcloud-bucket/VID.mp4?partNumber=1&uploadId=71a92c2083912de1fae7d44de886c2449956519396b3b9c3bd92d4f53637afe4
garage_s3 | 2026-02-19T11:04:33.690146Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) POST /nextcloud-bucket/VID.mp4?uploadId=71a92c2083912de1fae7d44de886c2449956519396b3b9c3bd92d4f53637afe4
garage_s3 | 2026-02-19T11:04:33.750501Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4
garage_s3 | 2026-02-19T11:04:33.796197Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) GET /nextcloud-bucket/?list-type=2&prefix=VID.mp4%2F&max-keys=1
garage_s3 | 2026-02-19T11:04:33.842764Z INFO garage_api_common::generic_server: [::ffff:172.30.198.5]:56814 (key GK1687cb20redacted2e99e257) HEAD /nextcloud-bucket/VID.mp4/
garage_s3 | 2026-02-19T11:04:33.843177Z INFO garage_api_common::generic_server: Response: error 404 Not Found, Key not found
result: upload seems successful, error on app persists.
```
Contributor guide
Assessment
This issue has not been assessed yet.