haiwen / seadroid

Android client for Seafile
Other
530 stars 279 forks source link

Crash when uploading a file from seafile android app #758

Closed markusd112 closed 1 month ago

markusd112 commented 5 years ago

When Choosing "Add" --> "Upload file" the app crashes each time.. Several crash reports via android crash reporting has been already sent.

markusd112 commented 5 years ago

App Version 2.2.6, Android 7.0, Moto G5 Plus

markusd112 commented 5 years ago

The problem occurs, when choosing a file to upload from SD card. When choosing a file stored in internal memory of the smartphone, the upload works...

ghost commented 5 years ago

same thing happening to me. device Note8 Oreo

DoS007 commented 5 years ago

Yeah, and just look at google play store comments. There are plenty, who have the same problem that upload does not work. And that problem does not exists since yesterday, but for months. Is seafile still activley developed?!

Only other option would be to move to nextcloud, but i don't want to yet. Plzz fix, uploading is crucial for an uploading and downloading app. And Android is the consumer most used plattform these days. So please please, fix it.

freeplant commented 5 years ago

We have fixed a few related issues that causing file uploading crash in recent versions. We will check a again.

DoS007 commented 5 years ago

@freeplant I really, really appreciate your fast response :+1: .

Is the version, in which the few related issues are solved, the play store version at this moment? If not, when will it be published in play store?

Edit: I'm using version 2.2.8 (from playstore). And it still has a problem.

On this https://github.com/haiwen/seadroid/releases site, there is only one newer version, which doesn't fix anything according file uploading regaring realese notes.

So the problem still exists. If there is any way to help you, give you logs or something, I would be happy to help.

Firefly1337 commented 5 years ago

@freeplant I had some time and debugged it, this is for downloading files: SeafConnection.java#getDownloadLink looks like the following:

HttpRequest req = prepareApiGetRequest(apiPath, params);
checkRequestResponseStatus(req, HttpURLConnection.HTTP_OK);
String result = new String(req.bytes(), "UTF-8");

String fileID = req.header("oid");
// should return "\"http://gonggeng.org:8082/...\"" or "\"https://gonggeng.org:8082/...\"
if (result.startsWith("\"http") && fileID != null) {
    String url = result.substring(1, result.length() - 1);
    return new Pair<String, String>(url, fileID);
} else {
    throw SeafException.illFormatException;
}

prepareApiGetRequest redirects to https://<url>/api2/repos/<repo-id>/file/?p=<file>&op=download which returns, at least on my server, "/seafhttp/files/<repo-id>/<file>". That value is saved to String result.

The following check (if (result.startsWith("\"http") && fileID != null) {) will not work because it is missing the URL. Simply adding the URL (retrievable via accounts.server) to String result will make it work.

I have not yet looked at the upload function but I suspect it might be the same issue. I am unsure wether this is an issue with the server, the app or my specific server config. Given the fact that I am not alone it's either the seafile server or app. Probably the app.

Firefly1337 commented 5 years ago

Found the same issue for SeafConnection.java#getUploadLink. Added the URL and upload is working fine again.

Firefly1337 commented 5 years ago

I created a PR for this, see #772

freeplant commented 5 years ago

@Firefly1337 Thanks for debugging the problem. What version of the server do you use? In our API document

GET https://cloud.seafile.com/api2/repos/{repo-id}/file/?p=/foo

should return something like

https://cloud.seafile.com:8082/files/adee6094/foo.c

Firefly1337 commented 5 years ago

@freeplant Ah! I think I know why. I have a bit more complex setup than most. My seafile server is in my LAN serving content using the internal IP address. At the same time it is also accessible via nginx reverse proxy through a VPN from my VPS using a public domain. (My local Seafile VM is also using a reverse proxy but internally on localhost).

Issue is probably because my FILE_SERVER_ROOT contains only /seafhttp. I need this to be a relative path for it to work both via IP and domain. That path is another location of my reverse proxy. Web client, Seafile desktop and even Seadrive are all working fine like this - except the app.

For me, the issue is clear now. But why are other people having issues uploading/downloading files? In any case, my code should generally work wether the URL is present or not.

I am using the latest Seafile server 6.3.4 (Community edition).

DoS007 commented 5 years ago

I tried another phone with android 8 - there was no problem. Thus the problem seems to be related to android 7 (tested with my smartphone and my tablet - they are using android 7).

I now tested on my android 7 tablet all 2.2* versions (including the newest release at this moment): 2.2.0 upload working 2.2.1 upload working 2.2.2 upload not working 2.2.3 upload not working 2.2.4 upload not working 2.2.5 upload not working 2.2.6 upload not working 2.2.7 upload not working 2.2.8 upload not working 2.2.9 upload not working 2.2.10 upload not working 2.2.11 upload not working

(Switching to seafile during uploading says "Hochladen fehlgeschlagen" or translated "upload failed")

As you can see 2.2.1 is the last working version. So the new changes made in 2.2.2 are faulty.

I hope that knowing the problem is related to android 7 and the problem began in 2.2.2 and there are still many people with android 7 having the problem (look play store page), it is easier for you to fix this now.

If i can do anything to help you, post logs somehow or test if a new release fixes the problem or so, just say, i'm happy to help you.

alexharnozd commented 5 years ago

Btw, i too have a problem with note 8 android 8.

Auto upload is working. But it wont upload all/completely all the folder images. Such as whatapps images folder(it will only upload some of it before it stop) Tried clear caches. Nothing. Tried few days with in out wifi area. Nothing. New photos from camera folder. No sync as well

Tried 2.2.1 ~ upload halfway then nothing. Tried latest version ~ upload halfway then nothing.

Phone is not root. Not sure where to find log from my android phone.

Server : community 6.3.4 raspi Download and upload manually no problem. Only auto upload got problem so far

Alex

DoS007 commented 5 years ago

@alexharnozd Oh, you think someone will fix that? I don't think so. I'm a bit depressed that nobody did something after my clear information and nobody even commented on that.

For now I just accepted, that android 7 will never work with newer versions and just use the older version for that. For Android 8 newest version is ok.

But anyway, you have android 8, so I suppose it's maybe more a thing of battery optimizing. Go into os deselect seafile for battery optimazation/saving. Does the problem then still appear?

alexharnozd commented 5 years ago

@DoS007 nothing much we can do on our end. Unless we go deep to the on how and do by ourself which is unlikely. Hahaha

Thanks for you advise. I will give it a try now.

And while for your problem. I hope someone can assisting you as well. As you know.. My achievement today till i be able to run seafile + nginx + letsencrypt with my zero IT knowledge consider big project to myself. And thats all got from community + forum + countless hours of reading. Zero knowledge somemore linux I dont even know what does su / sudo / apt iptables / pivpn /dns /opendns /smb /omv/webroor/ ls/ bash / for.... I read, play, edit, test, this is my 4th or 5th installation. HAHAHAHAHAHA

All the best for your problem, really hope someone could assist you for a help/hints

alexharnozd commented 5 years ago

@DoS007 been trying outbyour way for permission battery optimization and so on to be switch off/ignore for seafile apps. However same thing happened. It doesnt sync till finished. Could it be my photos files too much from whatapps? I tried many folders of photo Such as family trip, family photos, some project photos. It does came out with the folder as ussual but doesnt contained photos. Most of the folder. Would say it does syncing.it was just not long enough to upload it. Leave my phone charge wifi overnight. And the last sync/uploaded was 8 hours ago. Camera foldee sync arnd 30% of it. Whatapps image sync 10% of it. Other sync 5% of it The rest empty folder.

alexharnozd commented 5 years ago

https://github.com/haiwen/seadroid/issues/758#issuecomment-455897688

Hi @DoS007,

I actually tried out 2.2.13 android to my wife phone. Android 7 note 5 (32g) For daily auto sync between all her folders photos abd videos about a week ago It counted about 13g to my server. Its actually work as it should. Maybe upload could be stop somewhere. But i does continue some other times. Till all files being uploaded.

While for me. I found a problem when i upload 9999 photos from whatapps. It stop uploading after uploaded 2000++. Clear cache and data. Hoping that it will resume some other times. So far it has uploaded around 40g consist of my photos and video from my note 8.

Edit : i follow yoir advise by switching off battery optimisation by ignored seafile apps on my phone. And i sync 1 folder(1000 photos) by 1 folder(2000 photos) While for 100+ photos folder i can just uploads it at the same times Hope this will help you.

Alex

DoS007 commented 5 years ago

@alexharnozd don't know why this is happening

fredleeflang commented 5 years ago

My Android app version 2.2.14 also crashes. Is there anything I can do to help debug? My seafile server is behind a fritzbox router and an Apache proxy.

r4dh4l commented 2 years ago

Same here with F-Droid version 2.2.46 (121, added on 2022-07-12) under Android 7.1.1.