[java]3 Image variabelen uploaden via ftp of sturen naar php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De code helemaal onderaan gaat helemaal goed. Ik kan een plaatje selecteren, en deze wordt dan in 3 grotes getoond. origineel, hoogte 350 en hoogte 100.

Er zijn nu dus 3 images

Java:
1
2
3
private Image afbeeldingorig;
private Image afbeeldingklein;
private Image afbeeldingthumb;


Nu wil ik deze images óf doorsturen naar een php-pagina, óf uploaden op de server via http dan wel ftp.

Ik heb 2 ftp-libraries geprobeerd, namelijk.
http://www.enterprisedt.com/products/edtftpj/overview.html
en
http://jvftp.sourceforge.net/

Het lukt me met allebei niet te connecten met de ftp-server. ivm security permissions

Ook als ik de applet in de browser open, krijg ik netjes een warning of ik het certificaat wil accepteren (applet is gesigned), en kan ik een file van de lokale schijf selecteren, alleen kan ik niet zien wat er met de ftp geberud, omdat die output niet zichtbaar is, maar er wordt iig niks geupload.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public void ftp() {
    String passwd = "xxxxxxxxxxxx";
    String server = "ftp://xxx.xxx.xxx.xxx";
    String user = "xxxx";
    Ftp cl = new Ftp(); 
    FtpConnect cn = FtpConnect.newConnect("xxx.xxx.xxx.xxx"); 
    cn.setPassWord(passwd); 
    try 
    { 
    //cl.connect(cn); 
    cl.connect(server,Ftp.PORT); 
    //userName and the passwd in server 
    cl.login(user,passwd); 
    //a file in server 
    CoFile file = new FtpFile("IMG_3072.jpg",cl); 
     
    //file name in local pc 
    CoFile to = new LocalFile("IMG_3072.jpg"); 
     
    //working fine this is to copy remote file(t.txt) to local place(z.txt) 
    System.out.println("Load: "+ CoLoad.copy(to,file)); 
    }
    catch (IOException e) 
      { System.out.println(e); }


    } 



code:
1
2
3
4
5
6
7
Getting host by name: ftp://xxx.xxx.xxx.xxx
< Ctrl: Permission denied! >
Ftp> USER javaup
< Ctrl: Write, No connection! >
< Can't login to host. >
< Can't obtain INPUT STREAM for 'IMG_3072.jpg'! >
Load: false


Weet iemand misschien waar dit aan kan liggen, of hoe ik het wel kan aanpakken


Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
public class Upload extends Applet{
 private Button bt1;
 private boolean file = false;
 private boolean klein = false;
 private boolean thumb = false;
 private Image afbeeldingorig;
 private Image source;
 private Image afbeeldingklein;
 private Image afbeeldingthumb;
 private String filenaam;
 private String directory;
 private String pad;
 public void init() {
  
  this.setLayout( null );
  //this.setLayout(new BorderLayout(15,15));
  bt1 = new Button("Selecteer file");
  bt1.setBounds( 10, 10, 200, 25 );
  this.add(bt1);
  
 }
 
 public void paint( Graphics g ) {
    if (file) {
        g.drawImage ( afbeeldingorig, 10, 70, this );
        g.drawString (pad, 50, 50);
    }
    if (klein) {
        g.drawImage(afbeeldingklein,10, 450,this);
    }
    if (thumb) {        
        g.drawImage(afbeeldingthumb,10, 810,this);
    }
 }
 
 public boolean action(Event e1,Object arg){
  if (e1.target==bt1) {
   Frame f1 = new Frame();
   FileDialog d = new FileDialog(f1, "Open File", FileDialog.LOAD);
   ///d.setSize(300,100);
   d.show();
   d.dispose();
   filenaam = d.getFile();
   directory = d.getDirectory();
   pad = "file:\\" + directory + filenaam;
   afbeeldingorig = getImage( getDocumentBase(), pad);
   file = true;
   this.repaint();
   resizeklein();
   this.repaint();
   resizethumb();
   this.repaint();
   ftp();
   return true;
  } else return super.action(e1,arg);
 }
 
 public void resizeklein() {
    MediaTracker media = new MediaTracker(this);
    // java how-to image for example, can be JPG
    source = afbeeldingorig;
    media.addImage(source,0);
    try {
      media.waitForID(0);
      // scale down, hoogte 350
      
      Integer verhouding = source.getHeight(this) / 350;
      Integer newWidth = source.getWidth(this) / verhouding;
        
      ImageFilter replicate = 
         new ReplicateScaleFilter
           (newWidth, 350);
      ImageProducer prod = 
         new FilteredImageSource(source.getSource(),replicate);
      afbeeldingklein = createImage(prod);
      media.addImage(afbeeldingklein,1);
      media.waitForID(1);
      klein = true;
      } 
    catch(InterruptedException e) {}
    }
    
 public void resizethumb() {
    MediaTracker media = new MediaTracker(this);
    // java how-to image for example, can be JPG
    source = afbeeldingorig;
    media.addImage(source,0);
    try {
      media.waitForID(0);
      // scale down, hoogte 100
      
      Integer verhouding = source.getHeight(this) / 100;
      Integer newWidth = source.getWidth(this) / verhouding;
        
      ImageFilter replicate = 
         new ReplicateScaleFilter
           (newWidth, 100);
      ImageProducer prod = 
         new FilteredImageSource(source.getSource(),replicate);
      afbeeldingthumb = createImage(prod);
      media.addImage(afbeeldingthumb,1);
      media.waitForID(1);
      thumb = true;
      } 
    catch(InterruptedException e) {}
    } 

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

De laatste keer dat ik met een FTP server verbinding probeerde te maken ging dat _niet_ via
code:
1
ftp://ftp.domeinnaam.nl

maar gewoon met
code:
1
ftp.domeinnaam.nl
Verder even heeeeel gauw de docs van jFTP bekeken en volgens mij is dit gewoon voldoende:
Java:
1
2
3
4
5
6
7
8
9
10
   Ftp cl = new Ftp();

   try
   {  /* connect & login to host */
      cl.connect("ftp.server.com",Ftp.PORT);
      cl.login("my-user-name","my-sec-pass");
      ...
   }
   catch (IOException e)
      { System.out.println(e); }
Verwijderd schreef op dinsdag 19 september 2006 @ 17:16:
Heb ik ook al geprobeerd.

Mocht niet baten.
Geef dat dan ook even aan in je topicstart, net als ook wat relevante code ipv ook alle image methods etc. etc.

[ Voor 70% gewijzigd door TeeDee op 19-09-2006 17:19 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb ik ook al geprobeerd.

Mocht niet baten.

Het probleem is ook dat ik geen file kan selecteren, zonder dat de applet gesigned is, en als de applet gesigned is, dan kan ik hem wel in de browser openen, maar dan zie ik weer niet die meldingen over de ftp. Misschien heeft ie dan wel verbinding. Hoe kan ik die code, zoals hierboven

<Ctrl: permission denied!>

etc. ook in de webbrowser tonen?

Misschien weet ik dan meer.

[ Voor 80% gewijzigd door Verwijderd op 19-09-2006 17:19 ]


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Ik heb nog nooit met Java gewerkt, maar als je ipv System.out.println eens verander naar iets wat op je browser werkt? In bijv. .Net is dat response.write.

Zo zit je hele code in elkaar. Wel her en der een exception opvangen, maar _nergens_ de gebruiker een melding tonen dat er iets fout is.

Volgens mij is dit dan ook standaard debug werk. Ik weet niet waar je mee werkt :? maar een fatsoenlijke omgeving kan prima tracen, debuggen etc. etc.

[ Voor 48% gewijzigd door TeeDee op 19-09-2006 17:24 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TeeDee schreef op dinsdag 19 september 2006 @ 17:16:
De laatste keer dat ik met een FTP server verbinding probeerde te maken ging dat _niet_ via
code:
1
ftp://ftp.domeinnaam.nl

maar gewoon met
code:
1
ftp.domeinnaam.nl
Verder even heeeeel gauw de docs van jFTP bekeken en volgens mij is dit gewoon voldoende:
Java:
1
2
3
4
5
6
7
8
9
10
   Ftp cl = new Ftp();

   try
   {  /* connect & login to host */
      cl.connect("ftp.server.com",Ftp.PORT);
      cl.login("my-user-name","my-sec-pass");
      ...
   }
   catch (IOException e)
      { System.out.println(e); }

[...]

Geef dat dan ook even aan in je topicstart, net als ook wat relevante code ipv ook alle image methods etc. etc.
Dan krijg ik dezelfde code (ongeveer)

code:
1
2
3
4
5
6
Getting host by name: xxxxxxxxxx
Connecting to host: xxxxxxxx
< Ctrl: Permission denied! >
Ftp> USER xxxxx
< Ctrl: Write, No connection! >
< Can't login to host. >

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TeeDee schreef op dinsdag 19 september 2006 @ 17:22:
Ik heb nog nooit met Java gewerkt, maar als je ipv System.out.println eens verander naar iets wat op je browser werkt? In bijv. .Net is dat response.write.
Dat gaat volgens mij niet zo makkelijk, omdat alles wat op je applet komt in de paint-methode moet.
Ik ben ook niet echt een ster in java, maar dat zou inderdaad misschien wel meer info geven, omdat ik het dan even kan testen met het certificaat.

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Hmm, even voor mijn beeldvorming:
Hebben we het hier over een webapplicatie of een 'desktop' applicatie?

Nogmaals: kan je niet in je ontwikkelomgeving gebruik maken van tracing, debugging, breakpoints etc. etc.?

Anders maak je toch tijdelijk een grote Textbox welke gevuld wordt op deze manier:
Java:
1
2
   catch (Exception e)
      { Textbox.Text +=(e); }

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TeeDee schreef op dinsdag 19 september 2006 @ 17:36:
Hmm, even voor mijn beeldvorming:
Hebben we het hier over een webapplicatie of een 'desktop' applicatie?

Nogmaals: kan je niet in je ontwikkelomgeving gebruik maken van tracing, debugging, breakpoints etc. etc.?

Anders maak je toch tijdelijk een grote Textbox welke gevuld wordt op deze manier:
Java:
1
2
   catch (Exception e)
      { Textbox.Text +=(e); }
Dit is wel een goed idee, dat ga ik zo even doen.
Het gaat om een webapplicatie.
Eerst had ik een upload-form php gemaakt, met progressbar etc. Alleen de server is te langzaam om de plaatjes van een paar mb te gaan verkleinen. Dus wil ik dit vooraf doen.

Dat verkleinen is me dus al gelukt, alleen nu het uploaden nog.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op het moment dat de code:

Java:
1
2
3
4
5
catch (IOException e) 
      {      
      Textbox.append("" + e); }

    }

is, komt er nog steeds een dos schermpje met
code:
1
2
3
4
5
6
Getting host by name: xxxxxxxx
Connecting to host: xxxxxxxx
< Ctrl: Permission denied! >
Ftp> USER xxxxxxxx
< Ctrl: Write, No connection! >
< Can't login to host. >

Dus het lijkt of er geen exception optreedt

[ Voor 6% gewijzigd door Verwijderd op 19-09-2006 17:56 ]


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Ctrl: Permission denied! lijkt me overduidelijk: je login/passwd is niet goed. Probeer het eens met een gewone php-applicatie, of probeer eens iets met Java te downloaden van een publieke server waar geen login nodig is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb in ieder geval al meerdere malen gecontroleerd of er wel verbinding is te maken met behulp van een ftp-programma met dezelfde gegevens zal eens een anonieme ftp proberen.

In de documentatie staat, als er geen user parameter wordt meegegeven, dan wordt er 'anonymous' ingelogd.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Ftp cl = new Ftp(); 

   try 
   {  /* connect & login to host */ 
      cl.connect("ftp.debian.nl",Ftp.PORT); 
      //cl.login("anonymous",""); 
      Textbox.append("try");
      
       
   } 
   catch (IOException e) 
      {      
      Textbox.append("" + e); }

    } 


Levert dir op:
code:
1
2
Getting host by name: ftp.debian.nl
< Ctrl: Permission denied! >


Hier heeft het dus niet mee te maken.

[ Voor 61% gewijzigd door Verwijderd op 19-09-2006 19:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met de andere ftp-library
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 public void ftp() {
    
    FTPClient ftp = null;
    String host = "192.168.2.100";
    String user = "javaup";
    String password = "javaserver";
    try {           
        ftp = new FTPClient();
        ftp.setRemoteHost(host);
        ftp.connect();
        ftp.login(user, password);
        ftp.put("IMG_3072.jpg", "IMG_3072.jpg");
        ftp.quit();    
    } catch (Exception e) {
        Textbox.append("" + e);
    }   
 }


Krijg ik de error

java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.2.100:21 connect,resolve)

in de Textarea.

Als ik dan het applet sign en open in ie, dan krijg ik die melding niet te zien in de Textarea. Er staat tevens geen bestand op de ftp-server.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Bij mijn weten mag een applet - ook indien deze signed is - geen netwerkverbindingen maken, tenzij een policybestand op de machine van de gebruiker dat expliciet toelaat. De oorzaak ligt daar denk ik.

Zie ondermeer:
http://java.sun.com/docs/...urity/toolsign/index.html

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dmv keytool en jarsigner heb ik al wel dat certifitcaat gemaakt, dat was nodig om die files van de schijf van de gebruiker te lezen.

Maar als ik de applet op de server draai, en dan ftp naar localhost, mag dat wel, want dat moet toch ook kunnen denk ik>

Zal het zo even uitproberen.

Edit: maakt niks uit, voer een ftp.mkdir("new"); uit, en er is niks gebeurd als ik later inlog met mijn ftp-client.

[ Voor 17% gewijzigd door Verwijderd op 19-09-2006 20:40 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik raad je aan om je eens wat meer te verdiepen in de security policies en de beperkingen die de applet sandbox je opleggen. Dit constante willekeurige trail en error gaat je geen oplossing geven.

Mbt het maken van een netwerk verbinding kan ik je iig de volgende tip geven: Een applet mag enkel verbinding maken met de server waar deze ook vandaan komt.
Mbt debuggen: Bij internet explorer onder tools staat Sun Java Console. Hierin komen alle System.out en System.err van je applet terecht.

[ Voor 16% gewijzigd door Janoz op 19-09-2006 23:31 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz schreef op dinsdag 19 september 2006 @ 23:30:
Ik raad je aan om je eens wat meer te verdiepen in de security policies en de beperkingen die de applet sandbox je opleggen. Dit constante willekeurige trail en error gaat je geen oplossing geven.

Mbt het maken van een netwerk verbinding kan ik je iig de volgende tip geven: Een applet mag enkel verbinding maken met de server waar deze ook vandaan komt.
Mbt debuggen: Bij internet explorer onder tools staat Sun Java Console. Hierin komen alle System.out en System.err van je applet terecht.
Oke bedankt, verbinding met de server waar ie vandaan komt is goed, alleen als ik verbinding maak met localhost, is dat dan de client die de applet draait, of de server waar hij op staat?

Zal me even verdiepen in de security.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je weet waar het applet draait. Je weet dus ook waar de code uitgevoerd wordt. Waarom denk je dan dat een verbinding met localhost dan naar de server zou gaan? Ik ben erg benieuwd naar die redenatie.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • The - DDD
  • Registratie: Januari 2000
  • Nu online
Zie ook: http://java.sun.com/sfaq/#socket

Alhoewel je volgens mij met signen echt een boel moet kunnen... Kan echter geen linkje vinden. :S

[ Voor 55% gewijzigd door The - DDD op 20-09-2006 16:41 ]


Verwijderd

Topicstarter
Met signen heb ik al geregeld dat het applet de bestanden van de schijf van de gebruiker kan lezen.
Moet nog even naar de security policy kijken voor de verbinding, en verder dus gewoon verbinding maken met de naam van de server waar het applet op staat.


Het is nu gelukt om verbinding te maken met de ftp-server en er een map op aan te maken. Ga nu even uitzoeken hoe ik de aangemaakte Image - objecten kan uploaden.

In ieder geval alvast heel erg bedankt voor de hulp, de opmerking dat er iig alleen verbinding kon worden gemaakt met de server waar de applet vandaan komt, toen lukte het ineens.

[ Voor 40% gewijzigd door Verwijderd op 20-09-2006 17:18 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:10

Robtimus

me Robtimus no like you

Verwijderd schreef op woensdag 20 september 2006 @ 16:50:
Het is nu gelukt om verbinding te maken met de ftp-server en er een map op aan te maken. Ga nu even uitzoeken hoe ik de aangemaakte Image - objecten kan uploaden.
Stap 1: schrijf je Images naar (temp) file.
Stap 2: CoLoad.copy(CoFile src, CoFile dest);

Dat is het enige wat je kunt doen, tenzij je zelf een CoFile wilt gaan schrijven.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
IceManX schreef op donderdag 21 september 2006 @ 13:30:
[...]
Stap 1: schrijf je Images naar (temp) file.
Stap 2: CoLoad.copy(CoFile src, CoFile dest);

Dat is het enige wat je kunt doen, tenzij je zelf een CoFile wilt gaan schrijven.
Ik heb het nu zo:

1. de image in een byteArray stoppen
2. ftp.put de byteArray.

Hij load nu het image up, alleen is he zart, dus even kijken of hij goed is omgezet, of dat het aan de transfer-methode ligt.
Pagina: 1