Avatar billede gadebarnet Nybegynder
06. november 2004 - 19:15 Der er 33 kommentarer og
1 løsning

uplaod applet.

Jeg søger en java applet til upload af flere filer...

Det skal være sådan at man vælger en mappe, og så når der trykkes køres der noget asp kode (til at definere mapper struktur) og så uploades alle filer i mappen....

Nogle ideer?
Avatar billede arne_v Ekspert
06. november 2004 - 19:37 #1
En applet har default ikke adgang til fil systemet på client PC. Så der
skal også gøres noget der.

Selve upload med en HTTP POST et ret simpel.

Så det kan lade sig gøre.
Avatar billede gadebarnet Nybegynder
06. november 2004 - 19:54 #2
Hej ARne.

Altså det skal være en upload ting så brugeren vælger mappe og ikke fil der skal uploades...

Kan man det ?

Det skal forgår via en applet (derfor java) eller også noget activx.. Der skal bare ikke installeres noget på serveren.
Avatar billede arne_v Ekspert
06. november 2004 - 19:57 #3
At vælge et dir, finde alle filer og uploade filerne en af gangen er formentligt
nemmere end security aspektet.
Avatar billede gadebarnet Nybegynder
06. november 2004 - 20:15 #4
Ja, men hvordan kan man det ?
Jeg kender kun til at uploade 1 fil afgang...

Har du et bud?

Muligvis noget med en applet eller noget... :) ?
Avatar billede arne_v Ekspert
06. november 2004 - 20:19 #5
Jeg tænker applet.

Man kunne godt uploade alle filer med en multipart request.

Men jeg ville uploade filerne hver for sig. Eventuelt multitrådet. Meget simplere
kode.
Avatar billede arne_v Ekspert
06. november 2004 - 20:20 #6
Jeg kan også godt lave noget demo kode.

Men hvis ikke du kan få lyst security problemet, så er det skønne spildte
kræfter.
Avatar billede gadebarnet Nybegynder
06. november 2004 - 20:20 #7
Ja, altså upload hver fil efter hinanden... Men hvordan fortæller man så sit kode at den skal tage alle filer i den mappe som brugeren vælger ?
Avatar billede gadebarnet Nybegynder
06. november 2004 - 20:21 #8
Det må egentlig godt være via FTP hvis det hjælper ?
Avatar billede arne_v Ekspert
06. november 2004 - 20:22 #9
Ikke spor.

HTTP eller FTP er ikke så vigtigt.
Avatar billede gadebarnet Nybegynder
06. november 2004 - 20:26 #10
okay.. Problemet er vel bare hvordan man lave det så det tager alle filer i den mappe som brugeren vælger... Har du en løsning ?
Avatar billede arne_v Ekspert
06. november 2004 - 20:52 #11
Jeg kan godt lavet noget kode.

Men kan du løse security problemet ?
Avatar billede gadebarnet Nybegynder
06. november 2004 - 20:58 #12
Hvad taler du om ,omkring secrity?
Avatar billede arne_v Ekspert
06. november 2004 - 21:05 #13
se min 19:37:22 kommentar
Avatar billede gadebarnet Nybegynder
06. november 2004 - 21:06 #14
Det gør ikke noget at brugeren blvier spurt om de vil... Mulighed for at bruger skal dovnloade noget førs det virker er også ok...

?

Nogle ideer ?
Avatar billede gadebarnet Nybegynder
06. november 2004 - 22:22 #15
Havde du en ide?
Avatar billede arne_v Ekspert
06. november 2004 - 22:27 #16
Ja

javax.swing.JFileChooser med DIRECTORIES_ONLY
java.io.File list method
(Http)URLConnnection med POST method

Det vil kræve en 40-60 linier kode.

Jeg kan også sagtens skrive den kode.

Men indtil du ved hvordan du vil håndtere security så er der ikke meget
formål.

PS: Ovenstående kræver SUN JVM - det virker ikke med MS JVM.
Avatar billede gadebarnet Nybegynder
06. november 2004 - 22:33 #17
Det skal virke med de default folk normalt har installeret ?

Hvis du vil/kan må du gerne benytte dig af .net hvis det hjælper... Det skal bare foregå via en browser... Det der sikkerheds noget må du gerne skære ud i pap :)
Avatar billede arne_v Ekspert
06. november 2004 - 22:43 #18
Nogen har SUN JVM (default NetScape/Mozilla/Firefox), nogen har MS JVM (default
Internet Explorer 4 og 5), nogen har ingen JVM (default Internet Explorer 6).

????

Man kan også lave det i .NET.

Kun Windows 2003 + dem der enten har hentet .NET runtime manuelt eller via
Windows Update kan køre det.

Sikkerheds problemet er nok det samme.
Avatar billede arne_v Ekspert
06. november 2004 - 22:44 #19
Applets har default ikke adgang til client PC fil system overhovedet.

Af ret indlysende årsager.
Avatar billede gadebarnet Nybegynder
06. november 2004 - 22:54 #20
okay... Men hvis nu at brugeren skal give lov, er det så et problem?
Avatar billede gadebarnet Nybegynder
07. november 2004 - 10:25 #21
Arne ?
Avatar billede arne_v Ekspert
07. november 2004 - 10:29 #22
Det er faktisk ikke helt nemt.

Prøv at læs lidt om det.
Avatar billede gadebarnet Nybegynder
07. november 2004 - 10:37 #23
Jeg er igang med at læse lidt faktisk, men siden du er bedre end mig, tænkte jeg at du muligvis havde en ide...

Det eneste problem jeg lige kan se er det med mappe browsing, right ?
Avatar billede arne_v Ekspert
07. november 2004 - 23:45 #24
UploadManagerApplet.java
------------------------

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

import javax.swing.*;

public class UploadManagerApplet extends JApplet implements ActionListener {
    private final static String UPLOAD_URL = "http://localhost/upload.asp";
    private JButton select;
    private JTextArea files;
    private JButton upload;
    private String dirname;
    private String[] filenames;
    public void init() {
        getContentPane().setLayout(new BorderLayout());
        select = new JButton("Select dir");
        select.addActionListener(this);
        getContentPane().add(select, BorderLayout.NORTH);
        files = new JTextArea();
        getContentPane().add(new JScrollPane(files), BorderLayout.CENTER);
        upload = new JButton("Upload");
        upload.addActionListener(this);
        getContentPane().add(upload, BorderLayout.SOUTH);
    }
    public void actionPerformed(ActionEvent ev) {
        if(ev.getSource() == select) {
            JFileChooser chooser = new JFileChooser(System.getProperty("user.home"));
            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            if(chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
                File dir = chooser.getSelectedFile();
                dirname = dir.getAbsolutePath();
                filenames = dir.list();
                StringBuffer sb = new StringBuffer("");
                for(int i = 0; i < filenames.length; i++) {
                    sb.append(filenames[i]);
                    sb.append("\r\n");
                }
                files.setText(sb.toString());
            }
        }
        if(ev.getSource() == upload) {
            for(int i = 0; i < filenames.length; i++) {
                upload(dirname, filenames[i]);
            }
        }
    }
    private void upload(String dirname, String filename) {
        try {
            URL url = new URL(UPLOAD_URL + "?filename=" + filename);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setDoOutput(true);
            InputStream is = new FileInputStream(dirname + File.separator + filename);
            OutputStream os = con.getOutputStream();
            byte[] b = new byte[100000];
            int n;
            while((n = is.read(b)) >= 0) {
                os.write(b, 0, n);       
            }
            con.connect();
            if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
                //JOptionPane.showMessageDialog(this, filename + " uploaded");
            } else {
                JOptionPane.showMessageDialog(this, filename + " not uploaded");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, filename + " not uploaded");
        }
    }
}

upload.asp
----------

<%
adTypeBinary = 1
adSaveCreateOverWrite=2
uploaddir = "C:\z2"
filename = Request.QueryString("filename")
data = Request.BinaryRead(Request.TotalBytes)
Set binstm = CreateObject("ADODB.Stream")
binstm.Type = adTypeBinary
binstm.Open
binstm.Write data
binstm.SaveToFile uploaddir & "\" & filename, adSaveCreateOverWrite
%>
Avatar billede arne_v Ekspert
07. november 2004 - 23:46 #25
Den virker fint uden security.

Men der skal gøres noget inden den virker med security.
Avatar billede gadebarnet Nybegynder
08. november 2004 - 00:48 #26
Det der forstår jeg ikke helt... Hvor er referancen fra ASP til java siden ?
Avatar billede gadebarnet Nybegynder
08. november 2004 - 00:51 #27
Besked fra server:
This type of page is not served.
Description: The type of page you have requested is not served because it has been explicitly forbidden. The extension '.java' may be incorrect. Please review the URL below and make sure that it is spelled correctly.

Requested Url: /cp/1/UploadManagerApplet.java
Avatar billede arne_v Ekspert
08. november 2004 - 07:47 #28
Du skal have:

en HTML eller ASP side som viser appletten (den har jeg ikke lavet)
Java appletten
upload scriptet (som siker kan forbedres da jeg ikke er nogen ASP ørn)
Avatar billede arne_v Ekspert
08. november 2004 - 07:48 #29
.java filen skal compiles til en .class fil og når du skal have security på
skal den også pakkes i en .jar fil.
Avatar billede gadebarnet Nybegynder
08. november 2004 - 09:55 #30
De 2 sidste, kan du hjælpe med dem ?
Avatar billede arne_v Ekspert
08. november 2004 - 11:10 #31
javac -classpath . UploadManagerApplet.java
jar cvf UploadManager.jar UploadManager.class

men så skal den signes
Avatar billede arne_v Ekspert
08. november 2004 - 11:10 #32
NB: Ovenstående kode bruger Swing og kræver derfor Java 1.2 eller nyere
Avatar billede gadebarnet Nybegynder
04. december 2004 - 12:38 #33
Har oprettet et spørgsmål i ASP som du gerne må kigge på
Avatar billede arne_v Ekspert
04. december 2004 - 13:14 #34
Hvorfor skulle jeg det ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester