![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benutzer Registriert seit: 01.02.2005
Beiträge: 64
|
Hallo, ich habe gerade ein ähnliches Problem wie flanger einen Post vor mir - bei mir liegt es aber eher an den Grundlagen. Ich programmiere an einem CMS, dessen Adminbereich aus einer Java-Application besteht, welche die eingegebenen Daten per POST über eine URL-Connection an ein PHP-Script geben soll. Soweit das "nur" die Texte betrifft, ist da kein Problem bei und alles funktioniert. JEditorPane -> HTML auslesen -> den Inhalt des Body-Tags ausleden -> Upload -> fertig Jetzt will ich aber zusätzlich noch Bilder auf die Homepage stellen können. Die Frage ist: wie sende ich das Bild per Post an den Server? Für die Strings nutze ich einen BufferedWriter - der geht ja nur für Strings und nicht für Binärdaten, oder? Welchen Writer oder Stream muss ich da verwenden? Und wie verfahre ich dann mit den Daten auf der Serverseite? Da das PHP und nich Java ist: Bilder in MySQL speichern und ausgeben
__________________
Geändert von Binary (28.05.2007 um 20:05 Uhr) Grund: Link hinzugefügt |
| | |
| | Nach oben #2 |
| Johannes Müller Registriert seit: 15.09.2005 Ort: Königreich Flieden
Beiträge: 551
|
für binärdaten (damit müsstest du dich ja auskennen ich würde dir davon abraten, die bilder selber in einer datenbank zu speichern, die wird dadurch nur unnötig mit binärdaten zugemüllt. besser ist es, die bilder als dateien auf dem server zu speichern und in der datenbank nur verlinkungen auf die dateien verwenden (also entweder den dateinamen als spalte oder die dateien nach ids benennen).
__________________ Weißt Bescheid - Scheiß wie weit |
| | |
| | Nach oben #4 | |
| Benutzer Registriert seit: 01.02.2005
Beiträge: 64
|
also als sollte dann folgendes reichen (jetzt als Pseudo-Code einfach) Code: String postData = "?bild="+encodeBase_64(bild.getBytes); serverUpload.write(postData); serverUpload.flush(); serverUpload.close(); PHP-Code: Wäre schön, wenn das klappen würde. Zitat:
__________________
| |
| | |
| | Nach oben #5 |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.134
|
Japp. Da Java keine Standard-Bib für Base64 hat: http://migbase64.sourceforge.net/ |
| | |
| | Nach oben #6 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Noch ein Link für Suchende: http://www.galileocomputing.de/openb...aaf69cde3e11ec |
| | |
| | Nach oben #7 | ||
| Johannes Müller Registriert seit: 15.09.2005 Ort: Königreich Flieden
Beiträge: 551
| Zitat:
__________________ Weißt Bescheid - Scheiß wie weit | ||
| | |
| | Nach oben #8 |
| Benutzer Registriert seit: 01.02.2005
Beiträge: 64
|
Das is mir klar - aber JS ist hier leider gesperrt und anders, als über Java kann ich somit keinen WYSIWYG-Editor erstellen - was nunmal die Aufgabe ist... die Homepage soll komplett mit nur einem WYSIWYG-Programm editiert werden können. Den Webbrowser soll man dann nur noch brauchen um sich das Ergebnis dann anzuschauen. Genauer: Das Programm ist kein HTML-Editor, wie ein vereinfachtes Frontpage, o.ä. Das soll ein kompletter Assistent werden, der den Nutzer durch die einzelnen Eingaben leitet und möglichst mit kurzer Einarbeitungszeit zu nutzen ist --> Sprich idotensicher soll es sein. Leider hab ich verschiedene Seiten, auf denen sich z.B. Leute vorstellen... [BILD] - Text Und da das Gremium, das dort u.a. vorgestellt wird, jedes Jahr gewählt wird, ändert sich da immer mal wieder was.
__________________
|
| | |
| | Nach oben #10 | |
| Benutzer Registriert seit: 01.02.2005
Beiträge: 64
| Zitat:
Das ganze soll aber WYSIWYG werden. Die Nutzer des Programmes haben gesagt, dass sie keine Ahnung von HTML haben und auch nicht irgendwelche BB-Codes lernen wollen... Und bei HTML komm ich da nich um JS herum, wenn ich da einen Text markiere und der dann nach klick auf einen Button fett o.ä. werden soll, so wie beim Posten in diesem Forum. Nebenbei: Eine weiter Aufgabe ist es, 100% valides HTML zu generieren, da die Seite barrierefrei sein soll (BITV Priorität I zumindest). Also, grobe Zusammenfassung der Lösung: Ich lese das Bild ein und gebe die Daten an einen Base64-Codierer. Bastele das ganze in einen String rein ("&bild="+base64; )und schicke den als "POST" an den Server. Das PHP-Script liest dann die Daten aus, speichert die dann in eine Datei (statt in der db) und indexiert die Datei in der Datenbank. mit den weiteren Infos, wie Alt-Text, Größe, gehört zu welcher(n) Bildergalerie(n), etc. Hmmm... so einfach scheint das ja jetzt nicht zu gehen... so wie ich diese Quelle hier verstehe, muss ich die HTTP-Anfrage incl. Header selbst generieren... HTTP-Multipart-POST mit Java
__________________
Geändert von Binary (30.05.2007 um 14:53 Uhr) Grund: Tutorial gefunden | |
| | |
| | Nach oben #11 | |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
| Zitat:
Valides HTML, barrierefrei nach BITV 1 und das mit nem WYSIWYG-Editor den Leute bedienen die von HTML, Barrierefreiheit, Semantik etc keine Ahnung haben ? Und den du komplett selbst in Java schreiben willst/musst ? Also die Chance dass das klappt, geht Stark gegen null, wenn die Leute nicht bereit sind sich auch damit zu Beschäftigen, wenn du sagst es es gibt da ein Gremium von Leute, dann sind als erstes wohl Bilder von diesen Leuten auch vorhanden, diese müssen/sollten sinnvolle Alt-Tags bekommen etc, ein fetter Text ist nicht gleich ein fetter Text, dafür gibts die Unterscheidung <strong> [Was z.b. in Programmen die Blinden Webseiten vorlesen stärker betont wird] und die Möglichkeit etwas mit CSS fett zu machen ..... Alles Dinge die jemand der etwas über den Editor ändert wissen muss, sonst wird das nix mit BITV. Hier mal eine nette Liste mit allen relevanten Punkten für BITV Priorität 1: http://www.rrze.uni-erlangen.de/dien...ritaet-i.shtml mfg robo47 | |
| | |
| | Nach oben #12 | |
| Projektleiter Registriert seit: 30.11.2005 Ort: Bottrop
Beiträge: 1.134
| Zitat:
| |
| | |
| | Nach oben #13 |
| Benutzer Registriert seit: 01.02.2005
Beiträge: 64
|
Naja - das mit dem nichts lernen wollen war auch etwas übertrieben dargestellt...
Bei jedem Edit bekommen "wir, die ahnung haben" den Quelltext der Änderung per Mail und können so kurzfristig reagieren. Bei dem Prog geht es nur darum, das jeder ohne sich zu 100% mit der Materie zu beschäftigen und auskennen zu müssen, einen Bericht, Ausschreibung, etc auf die Homepage setzen kann. Somit müssen wir admins nicht jeden Text in HTML/CSS formatieren, etc. [EDIT] @Pago: Ok, danke, probier ich dann einfach mal... Die Sache mit dem String liegt mir grade eher, da aich dann nicht den kompletten Upload-Thread neu coden müsste. aber eine kurze Frage: ich dachte Base64 ist eine Codierung, die es erlaubt, zwischen versch. Betriebssystemen Texte auszutauschen, da deren 8-Bit Codierung auf eine 6-Bit heruntergerechnet wird - diese 6-bit Umrechnung wird zwar wieder rückgängig gemacht, aber beim umrechnen auf 8 bit wird dazu die Codierung des aktuellen OS herangezogen. So haben wir das zumindest in IT vor 1-2 Jahren mal gelernt... Wenn also der Nutzer Windows nutzt und der Server Linux nutzt - kommt da dann das gleiche nach dem Rückcodieren wieder raus?
__________________
Geändert von Binary (30.05.2007 um 15:55 Uhr) Grund: Antwort an Pago |
| | |
| | Nach oben #14 |
| Johannes Müller Registriert seit: 15.09.2005 Ort: Königreich Flieden
Beiträge: 551
|
ähm ich habe das mit dem html-formular nur als beispiel gedacht, wo dateiuploads über php gehandhabt werden. dabei kann das php-skript über das $_FILES-array ganz einfach auf hochgeladene dateien zugreifen. nen header zu senden is net so komploziert, das geht notfalls einfach per copy&paste übernehmen. für die von mir vorgeschlagene variante mit dem dateiupload musst du nen multipart-content erstellen, bei dem dann die hochzuladenden dateien als einzelne parts enthalten sind.
__________________ Weißt Bescheid - Scheiß wie weit |
| | |
| | Nach oben #16 | ||||
| Benutzer Registriert seit: 01.02.2005
Beiträge: 64
| Zitat:
Zitat:
Zitat:
Zitat:
Von Windows auf Linux bsp. funktioniert das also nur per Mail, nicht aber über sonstige Datentabellen (außer du pfrimelst das per Hand auseinander und weißt welche Codepage im original im Einsatz war)
__________________
Geändert von Binary (30.05.2007 um 17:55 Uhr) Grund: *schäm* unmengen an Tippfehlern | ||||
| | |
| | Nach oben #18 |
| Benutzer Registriert seit: 01.02.2005
Beiträge: 64
|
Nicht ganz: Codieren: Texte in Codepage X des Quell-OS -> Codepage-unabhängigen ASCII-Zeichen decodieren: Codepage-unabhängige ASCII-Zeichen -> Codepage Y des Zielsystems... wenn X = Y, dann klappt das; wenn X != Y, dann nicht ich hätte etwas ausführlicher Zitieren sollen, ann wäre das nicht passiert
__________________
|
| | |
| | Nach oben #19 |
| Benutzer Registriert seit: 01.02.2005
Beiträge: 64
|
So, ich meld mich nochmal kurz - ich bin jetzt bis zum 10.6. im Urlaub. Wundert euch also nicht, wenn ich nicht schreibe^^. Euch allen ne schöne Woche!
__________________
|
| | |
| | Nach oben #20 |
| Erfahrener Benutzer Registriert seit: 27.02.2006
Beiträge: 159
|
Also noch einmal BASE64 ist eine Kodierungslogik, die vereinfacht gesagt 3 Bytes durch 4 Basiszeichen auf Basis 64 (64 Zeichen) abbildet. Kodierung <-> Dekodierung erfolgt 1:1 ohne irgendeine Wandlung. Hier mal die entsprechende Java-Methoden: Code: private static String encodeBase64String(byte abyte0[], int i, int j)
{
if(abyte0 == null)
return null;
int k = 0;
int l = 0;
StringBuffer stringbuffer = new StringBuffer(((j + 2) / 3) * 4);
for(int i1 = 0; i1 < j; i1++)
{
k = (k << 8) + (abyte0[i + i1] & 0xff);
for(l += 8; l >= 6;-)
{
l -= 6;
stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(k >>> l & 0x3f));
}
}
if(l == 2)
{
stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((k & 3) << 4));
stringbuffer.append("==");
} else
if(l == 4)
{
stringbuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((k & 0xf) << 2));
stringbuffer.append('=');
}
return stringbuffer.toString();
}
private static byte[] decodeBase64String(String s)
{
if(s == null || s.length() < 4)
return null;
int i = s.length();
int j = 0;
if(s.substring(i - 2).equals("=="))
{
i -= 2;
j = 2;
} else
if(s.substring(i - 1).equals("="))
{
i--;
j = 4;
}
int k = (i * 6 + j) / 8;
byte abyte0[] = new byte[k];
int l = 0;
int i1 = 0;
j = 0;
for(int j1 = 0; j1 < i; j1++)
{
char c = s.charAt(j1);
int k1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(((int) (s.charAt(j1))));
if(k1 == -1)
return null;
j += 6;
i1 = i1 << 6 | k1 & 0x3f;
if(j >= 8)
{
j -= 8;
abyte0[l++] = (byte)(i1 >>> j & 0xff);
}
}
return abyte0;
}
Gruß, Jumper, the II. |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Java Applet soll Daten an ein PHP Script senden | flanger | Allgemeine Java-Programmierung | 5 | 16.05.2007 16:52 |
| PHP Script alle x Sekunden ausführen | .bat Script? | dsxs | Sonstige Programmiersprachen | 2 | 03.08.2006 12:15 |
| [JAVA] Wie man aus Java mit einem PHP-Script kommuniziert | sparrow | Tutorials | 0 | 25.03.2006 22:24 |
| Java Script & Java | manuel | Allgemeine Java-Programmierung | 8 | 21.12.2005 19:58 |
| [BUCH] Java ist auch eine Insel | kampet | Literatur | 5 | 22.02.2005 14:40 |