Bild Dateien in einem Ordner auf einen FTP-Server übertragen - Wie wähle ich den Ordner aus?

  • Antworten:13
franzgans
  • Forum-Beiträge: 7

11.06.2012, 14:26:40 via Website

Hallo zusammen. Ich bin gerade dabei eine App zu schreiben und bin eigentlich noch ein ziemlicher Neuling in dem Gebiet der Android App Entwicklung.

Das Ziel meiner App ist, dass damit ein Bild gemacht wird und das an auf einen FTP Server übertagen wird.

Nun habe ich die App soweit, dass das gespeicherte Bild in einem von mir vorgegebenen Ordner "/sdcard/FTP/" auf meinem Gerät gespeichert wird. Nun möchte ich mit dem Aufrufen meiner FTP-Activity diese gemachten Bilder in dem Ordner "/sdcard/FTP/" auf meinen FTP-Server übertragen.
Ich habe den Code mittlerweile soweit, dass ich eine txt-Datei auf den FTP-Server schicken kann.


Wie und wo muss ich aber den Code jetzt umändern, dass ich die Dateien (in meinem Fall Bilder) in dem Ordner "/sdcard/FTP/" auf meinen FTP-Server hochladen kann?


Hier mein Code:
1package de.android.datenuebertragung;
2
3import java.io.ByteArrayInputStream;
4import java.io.IOException;
5
6import org.apache.commons.net.ftp.FTPClient;
7
8import android.app.Activity;
9import android.util.Log;
10
11public class FTPManageralt extends Activity{
12 public static Object INTENT_CAPTURE_IMAGE;
13 FTPClient con = new FTPClient();{
14
15
16 try
17 {
18 con.connect("host");
19 if (con.login("user", "password"))
20 {
21
22 con.enterLocalPassiveMode(); // important!
23 String data = "Dieses ist ein Test";
24 ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes());
25 boolean result = con.storeFile("/FTPTest.txt", in);
26 in.close();
27 if (result) Log.v("upload result", "succeeded");
28 System.out.println("Test ok ...");
29 }
30 }
31 catch (Exception e)
32 {
33 e.printStackTrace();
34 }
35
36
37 try
38 {
39 con.logout();
40 con.disconnect();
41 }
42 catch (IOException e)
43 {
44 e.printStackTrace();
45 }
46}

Antworten
Luigi
  • Forum-Beiträge: 2.282

11.06.2012, 14:35:44 via Website

Ich würde jetzt sagen, entweder den Pfad jedesmal voranstellen:

1boolean result = con.storeFile("/sdcard/FTP/FTPTest.txt", in);

oder mit changeWorkingDirectory einmalig das Remote-Verzeichnis setzen.

Je nachdem was für weitere Datei-Operation komfortabler ist.

Antworten
franzgans
  • Forum-Beiträge: 7

11.06.2012, 14:40:37 via Website

Ja aber mit der Zeile erstellt der mir doch nur die Ordner auf dem FTP-Server. Das ist aber nicht mein Ziel.

Ich will die Dateien, die bereits in einem Ordner auf meinem Handy "/sdcard/FTP/" existieren, auf den FTP-Server übertragen. Nicht die Txt-Datei. Also alle Dateien (in meinem Fall die Bilder) auf den FTP-Server schicken.

Antworten
Luigi
  • Forum-Beiträge: 2.282

11.06.2012, 15:30:25 via Website

Jo, sorry, klar. Das waren eindeutig zu viele "/sdcard/FTP/" in Deinem Text ;-) Hab es nochmal gelesen.

Du meinst die grundsätzliche Auflistung der Files lokal aus "/sdcard/FTP/" und dann die Schleife dazu?

1File myDir = new File("/sdcard/FTP/");
2File<> pics = myDir.listFiles();
3
4for (int i = 0; i < pics.length; i++)
5{
6 <..>
7 result = con.storeFile(pics<i>.getName(), new FileInputStream(pics<i>));
8 <..>
9}
(statt <> ---> [] ; ließ sich nicht verwenden im Code-Tag..)

Oder hab ich Dich jetzt schon wieder falsch verstanden?

— geändert am 11.06.2012, 15:47:25

Antworten
franzgans
  • Forum-Beiträge: 7

11.06.2012, 16:07:48 via Website

Also Ziel ist es, dass wenn ich die FTPActivity aufrufe, dass alle jpg-Dateien, die sich in dem Moment in dem Handy-Ordner "/sdcard/FTP/" befinden auf den FTP-Server geschickt werden.

So schwer wird das doch eigentlich nicht sein? Oder?

Ist Dein Code dafür? Ich habe den mal eingegeben. Bekomme aber Syntax fehler bei ...new FileInputStream(pics<i>));

— geändert am 11.06.2012, 16:08:59

Antworten
Luigi
  • Forum-Beiträge: 2.282

11.06.2012, 16:40:59 via Website

franzgans
So schwer wird das doch eigentlich nicht sein? Oder?

Ist Dein Code dafür? Ich habe den mal eingegeben. Bekomme aber Syntax fehler bei ...new FileInputStream(pics<i>));

Der Code ist nur Quick'n'Dirty - auf korrekte Syntax nicht geprüft. Ich war jetzt von Java-Kenntnissen ausgegangen ;-) - und hatte es zudem noch dazu geschrieben: Alle <> sind natürlich []. Die ließen ich im [code]-Tag bloß nicht verwenden.

Grundsätzlich ist es das Gerüst, ja. Zusammen mit Deinen FTP-Operationen halt. Du kannst auch mit 'nem FilenameFilter noch jpegs filtern. Am Besten schaust Du dazu selber mal hier.

— geändert am 11.06.2012, 16:42:52

Antworten
franzgans
  • Forum-Beiträge: 7

11.06.2012, 16:51:17 via Website

Ne, leider so gut wie gar keine Java Kenntnisse:(

Ich muss das Projekt für die Schule machen. Das muss irgendwie einfach funktionieren:(

Achso. Ja, die Klammern hatte ich geändert. Aber nicht in den Code Zeilen.

Ich hab das jetzt mal geändert.

In der Zeile [code]boolean result = con.storeFile(pics[i],getName(), new FileInputStream(pics[i]));[/code]

bekomme ich bei getName den Fehler: "The method getName() is undefined for the type FTPManager"

Den bekomme ich nicht weg:(


Und muss ich die variable i erst noch initialisieren? Weil in der selben zeile bekomme ich bei den [i] auch noch den Fehler "i cannot be resolved to a variable"

Ich hänge da nun schon Tage lang und bekomme einfach keine Lösung hin:(

— geändert am 11.06.2012, 16:52:11

Antworten
Luigi
  • Forum-Beiträge: 2.282

11.06.2012, 16:59:50 via Website

franzgans
Ne, leider so gut wie gar keine Java Kenntnisse:(

Ouh. Ob das dann so eine gute Idee ist.. Code-Schnipsel zusammen zu suchen und dann aneinander kleben, ohne zu wissen was das überhaupt bedeutet und ohne kleinste Syntax-Fehler selbst zu erkennen.

Ich hab leider kein Umgebung um 'ne Syntax geschweige denn den ganzen Code zu prüfen.

So viel noch in Kürze: Statt pics[i],getName() muss es pics[i].getName() heißen. i müsste innerhalb der for-Schleife (von { bis }) bekannt sein, ist ja auch oben definiert: for (int i = 0....)

— geändert am 11.06.2012, 17:01:00

Antworten
franzgans
  • Forum-Beiträge: 7

11.06.2012, 17:10:12 via Website

Ich habe lediglich etwas C-Kenntnisse. Ja, ich weiß. Es ist schon mühseelig das Programm zu entwickeln. Ja, ich hab das ja auch soweit hinbekommen. Aber jetzt hänge ich an dem letzten von mir genannten Problem.

Ich hab den Code jetzt soweit, dass mir keine Syntax Fehler mehr angezeigt werden.

— geändert am 11.06.2012, 17:16:58

Antworten
franzgans
  • Forum-Beiträge: 7

11.06.2012, 17:39:24 via Website

Update. also, ich habe es jetzt soweit hinbekommen, dass er mir die Bilder auf meinen FTP-Server überträgt. Die sind aber leer. Bzw. können nicht angezeigt werden. Woran kann das denn noch liegen?

Antworten
Luigi
  • Forum-Beiträge: 2.282

12.06.2012, 09:52:57 via Website

Nach dem Verbinden mal auf Binären Transfer Modus stellen. Dein Test-Text war ja ASCII, die Bilder sind nun Binärdateien.

1con.setFileTransferMode(FTP.BINARY_FILE_TYPE);

Bei den Imports entweder noch
1import org.apache.commons.net.ftp.FTP;
hinzufügen oder gleich in
1import org.apache.commons.net.ftp.*;
ändern.


Meine Java-Zeit ist zwar eindeutig zu lange her, aber ggf. noch die InputStreams wie bei Deinem Test separat definieren und gescheit wieder schließen, alleine schon damit die Ressourcen der Streams wieder freigegeben werden:
1FileInputStream fi = new FileInputStream(pics<i>);
2result = con.storeFile(pics<i>.getName(), fi);
3fi.close();
(Denk dran die <> in [] zu ändern.. ;-))

Mehr weiß ich dann leider auch nicht. Vielleicht kann sich ja auch ein aktiver Entwickler noch dazu äußern. Aufn Schlips treten tut er mir damit sicher nicht, wollte nur kurzfristig mit Basis-Wissen aushelfen.

Antworten
franzgans
  • Forum-Beiträge: 7

13.06.2012, 10:38:09 via Website

Hey,

danke für die Antwort.

Ich habs jetzt hinbekommen.


musste aber den Code
1con.setFileType(FTP.BINARY_FILE_TYPE);
verwenden.

Wenn ich deinen Code benutzt habe, hat der mir irgendwie gar nichts mehr übertragen. Aber jetzt gehts.

Vielen Dank. Hast mir wirklich sehr geholfen!

— geändert am 13.06.2012, 10:38:25

Antworten
Anfänger
  • Forum-Beiträge: 1

31.01.2014, 22:44:41 via Website

Hallo :)
ich bin noch ganz neu in java unterwegs und wollte mal fragen ob du mir dein package de.android.datenuebertragung; anzeigen könntest damit ich das ganze mal ausprobieren könnte
wäre echt nett
danke im vorraus

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.02.2014, 10:04:16 via Website

Sieht schlecht aus, der Fragesteller hat schon ewig nichts mehr gepostet.
Aber wenn du gut im programmieren bist, dann sollte es ein kindersiel sein, das selbst zu entwerfen.
Ausserdem gibt es im Internet Massenhaft Beispiele.
Dann einfach mal googleln

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten