# Bilder durch's Netzwerk usw ...



## Samarek (1. Feb 2013)

Hallo,

ich habe gerade folgende Sorge ... 

mein aktuelles Projekt soll auf allen Plattformen laufen (also Linux, Windows, Mac).

und das Programm soll Dateien auf einen Server im lokalen Netzwerk und wieder davon runter kopieren können und die Dateinamen und die Pfade in die die Dateien gelegt werden sollen liegen in einer Datenbank von wo das Programm sich die Infos dann holt.

Wer aufgepasst hat weiss jetzt schon wo mein Problem liegt 
Und zwar fliegen mir, logischerweise, ständig die Pfade um die Ohren, kann mir da vielleicht mal jemand weiterhelfen mit nem Tutorial-Link, ner kleinen Erklärung worauf ich achten muss, wie ich es am besten angehe oder sowas?

Ich steh grad echt massiv auf dem Schlauch und mir fällt quasi garnichts dazu ein.


----------



## nillehammer (1. Feb 2013)

Nutze in Pfaden in Java *immer forward Slashes*. Das funktioniert immer. ...Mal so ins Blaue hineingeraten, weil ICH nicht erkennen kann, was Dein Problem konkret ist.


----------



## Samarek (1. Feb 2013)

Erstmal danke für den Tipp, das war mir aber durchaus klar.

Sorry, ich weiss dass ich mich sehr undeutlich ausdrücke, das hängt halt wirklich daran dass ich es einfach nicht richtig in meinem Kopf modelliert kriege.
Darum habe ich halt auch so große Probleme dabei das genauer zu umschreiben.

Also, das Problem ist halt einfach wenn ich z.B. die Daten auf einem Windowssystem auf dem gemappten Laufwerk T: liegen habe dann würde er ja den Pfad in der Datenbank als "auf Laufwerk T liegend" anlegen. Mit der Info können aber UNIXoide Systeme herzlich wenig anfangen, also bräuchte ich dann ja irgendwie einen Pfad mit dem sowohl Windows als auch UNIX was anfangen können.


----------



## maki (1. Feb 2013)

Samarek hat gesagt.:


> Also, das Problem ist halt einfach wenn ich z.B. die Daten auf einem Windowssystem auf dem gemappten Laufwerk T: liegen habe dann würde er ja den Pfad in der Datenbank als "auf Laufwerk T liegend" anlegen. Mit der Info können aber UNIXoide Systeme herzlich wenig anfangen, also bräuchte ich dann ja irgendwie einen Pfad mit dem sowohl Windows als auch UNIX was anfangen können.


SMB shares funzen auch unter *nix mit Sambaclient.


----------



## Bernd Hohmann (1. Feb 2013)

Samarek hat gesagt.:


> und das Programm soll Dateien auf einen Server im lokalen Netzwerk und wieder davon runter kopieren können und die Dateinamen und die Pfade in die die Dateien gelegt werden sollen liegen in einer Datenbank von wo das Programm sich die Infos dann holt.



Kristallkugel: Du hast eine Datenbank der Form

Titel: The Last Stand
Darsteller: Arnie Schwarzenegger
Video: t:\videos\action\TheLastStand.avi

oder 

Video: t:\videos\comedy\Kindergardencop.avi

Die Clients können in der Datenbank suchen und bekommen den LInk auf das Video zurück.

Geht so nicht. Lösung kommt jetzt darauf an, wie Dein Programm aussieht. Wenn das eine lokale Java-Anwendung (zb mit Swing) ist, dann lege dort lokal in einer Ini-Datei das Präfix zum Pfad ab (also hier t:\videos) und strippe das entsprechend in der Datenbank ab. Bei einer Webanwendung würde ich das Video einfach als Download mit entsprechendem Mime-Typ abspielen lassen.

War ich auf der richtigen Spur?

Bernd


----------



## tröööt (2. Feb 2013)

gehen wir das problem mal ganz anders an : KEINE absoluten pfade nutzen !

grundsätzlich hat man auf jedem system , gleich ob win, unix oder mac , in seinem "user.home" volle rechte ...

normalerweise kann man auch daten von anderen orten lesen ... aber schreiben verlangt dann meist immer erhöte admin-rechte ...

daraus kann man folgern : nutze nur relative pfade zum user.home ... auch wenn die daten von anderen orten gelesen wurden ...

in deiner datenbank sollten dann grundsätzlich nur pfade nach dem motto : "/video/action/blablub.avi" oder "/music/metal/blubbla.mp3" stehen ...

diese sollte der client relativ zum user.home auflösen ... falls nötig noch verzeichnisstruktur erstellen ... und dann in den pfad "user.home+pfad_aus_db" speichern ...

denn im gegensatz zu bernd habe ich es so verstanden das du in der datenbank nicht nur die pfad speicherst sondern auch die daten komplett auf den server hochlädst ...

dann müsste in der datenbank zusätzlich noch darüber "buch geführt" werden wo die daten auf dem server liegen damit die server-anwendung diese auch findet und zusammen mit dem neuen realtiven pfad ausliefert ...

wenn du allerdings jetzt darauf abzielst das du z.b. ein net-drive zum server verbindest und es da einfach reinschiebst ... musst du erstmal ermitteln an welche share das net-drive gekoppelt ist und dann dies relativ zum server-namen nehmen ...

ist alles einfacher als es sich anhört ... nur haben wir hier scheinbar echt alle ein problem damit deine aktuelle struktur zu verstehen ...


----------



## Samarek (4. Feb 2013)

> nur haben wir hier scheinbar echt alle ein problem damit deine aktuelle struktur zu verstehen ...



Das ist ja durchaus ein valides Problem, ich habe ja bereits angemerkt dass ich Probleme damit habe dieses Problem in konkrete Worte zu fassen.



> Also, das Problem ist halt einfach wenn ich z.B. die Daten auf einem Windowssystem auf dem gemappten Laufwerk T: liegen habe dann würde er ja den Pfad in der Datenbank als "auf Laufwerk T liegend" anlegen. Mit der Info können aber UNIXoide Systeme herzlich wenig anfangen, also bräuchte ich dann ja irgendwie einen Pfad mit dem sowohl Windows als auch UNIX was anfangen können.



Das hier war schonmal ein Versuch das Problem genau zu beschreiben, aber was noch fehlt ist die Info dass die Datei die hochgeladen werden soll ein Vorschaubild ist und der eigentliche Pfad auf einen x-beliebigen Netzwerk-Pfad verweisen kann. Der eigentliche Pfad beschreibt halt wo sich die Daten finden lassen, die auf dem Vorschaubild schon dargestellt sind.
Daher brauche ich eigentlich aufjedenfall absolute Pfade, der das Programm auf mehreren Rechnern im Netzwerk laufen können muss.


----------



## nillehammer (4. Feb 2013)

> lso, das Problem ist halt einfach wenn ich z.B. die Daten auf einem Windowssystem auf dem gemappten Laufwerk T: liegen habe dann würde er ja den Pfad in der Datenbank als "auf Laufwerk T liegend" anlegen.


Ok, jetzt sehe ich, wo das Problem liegt. Du hättest gerne in Deinem Java-Code den Komfort, mit der File-API zu arbeiten und nicht mit irgendwelchen Netzwerk-APIs. Deswegen mappst Du die Laufwerke über SMB in das Filesystem des Rechners, wo das Java-Programm laufen soll. Das kann man machen. Es gibt unter Unix zwar keine Laufwersbuchstaben (z.B. T: ), aber vielleicht gibt es die Möglichkeit, einen Netzwerkordner unter *Windows* ähnlich wie unter Unix einfach irgendwo in den Verzeichnisbaum zu mounten? Eine (etwas längere) Google-Recherche führte folgenden Link zutage: Mapping drive letters to local folders in Windows XP | TechRepublic
Damit kannst du unter Windows und unter Unix einen gleichnamigen Verzeichnisbaum aufbauen und das Problem andersrum umschiffen.


----------



## Samarek (5. Feb 2013)

Nein, das Problem ist dass ich mit den File-APIs bestens vertraut bin, allerdings von den Netzwerk-APIs keine Ahnung habe.
Ausserdem mappe ich mir hier garnichts, ich arbeite mit einer bestehenden Infrastruktur an der ich auch nicht wirklich was ändern kann, von daher scheidet die Lösung mit dem Laufwerke mappen aus, aber ich verstehe die grundsätzliche Idee und wenn die Neustrukturierung der Infrastruktur hier eine Möglichkeit wäre würde ich es wohl wirklich so machen, hört sich soweit ganz gut an.

Mein Problem ist also eigentlich dass ich mit der File-API auf Dateien zugreife deren Netzwerk-Infos (auf welchem Host liegt die Datei) ich aber eigentlich brauche, die ich aber natürlich nciht über die File-API kriege.
Damit ist die aktuelle Frage "Wie erfahre ich die IP-Adresse (oder sonst ein einzigartiges Merkmal) eines Computers auf dem eine mir bekannte Datei liegt" ?


----------



## Lumaraf (5. Feb 2013)

Wenn du es hinbekommen kannst immer UNC-Pfade zu speichern statt Pfade auf Netzlaufwerke sollte JCIFS dir dabei helfen von allen Systemen auf die Dateien zugreifen zu können.


----------



## Samarek (6. Feb 2013)

Uuuhu ...
da kommen wir der Sache ja jetzt langsam näher 
UNC-Pfade you say, ... interesting

Hab damit gerade auch schon ein wenig experimentiert, sieht sehr vielversprechend aus
hab hier diesen Thread gefunden
http://www.java-forum.org/allgemeine-java-themen/24317-windows-pfad-unc-pfad-wandeln.html

und da gibts nen kleinen Beispielcode wie ich von einer Datei im Netzwerk den UNC-Pfad herauskriege.

verbleibende Probleme, derer ich mich jetzt annehmen werde
- die IP bekomme ich mit net raus, das ist natürlich ein Windows Programm, ich muss mal herausfinden was die Mac bzw. UNIX Äquivalente sind
- das funktioniert nur für Netzwerk-Dateien, nicht für Dateien die lokal liegen

Werde mich da jetzt an die Recherche machen und hier immer mal wieder posten wenn ich mehr weiss, würde mich aber sicher auch freuen wenn jemand anders der da jetzt schon mehr weiss das hier posten kann


----------

