Avatar billede iso Nybegynder
12. januar 2005 - 11:05 Der er 9 kommentarer og
1 løsning

Upload filer på serveren

Jeg er relativ ny til java, men jeg kunne godt tænke mg at lave en upload applikation, hvor man kan vælge flere filer ad gang og uploade dem på serveren. Filerne kan være store(1 GB). Applikation skal køre på klinten via Java web start.
Jeg vil bruge upload med en HTTP POST til et PHP script (Se spørgsmål: http://eksperten.dk/spm/516338)

Mit spørgsmål er:
1. kan det lade sig gør? Evt. bedre forslag.
2. er der nogen der kan omskrive class RawPost fra spørgsmål: http://eksperten.dk/spm/516338, så den kan tag alle slags filer (.pdf, .jpg, .gif, .txt)
Avatar billede arne_v Ekspert
12. januar 2005 - 11:44 #1
Jeg har lavet utallige varianter af den kode.

F.eks.:

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

import javax.swing.*;

public class UploadManager extends JFrame 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 UploadManager() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        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);
        pack();
    }
    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());
                pack();
            }
        }
        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");
        }
    }
    public static void main(String[] args) {
        UploadManager um = new UploadManager();
        um.setVisible(true);
    }
}
Avatar billede iso Nybegynder
12. januar 2005 - 12:00 #2
Det kunne jeg godt forestille mig, men jeg kunne ikke finde det rigtigt frem.
Jeg kender ikke noget til ASP. Hvad med PHP løsning til 'upload' funktion?
Hvad med 1. del af spørgsmålet?
Avatar billede arne_v Ekspert
12. januar 2005 - 12:18 #3
Det eneste i Java koden som skal ændres for at skifte fra ASP til PHP
er jo URL'en.

Der burde ikke være nogen ben i det PHP script. Jeg kan godt bikse et
PHP script sammen i aften som virker med ovenstående upload.
Avatar billede arne_v Ekspert
12. januar 2005 - 12:19 #4
Med op til 1 GB filer så ville det nok være bedre med FTP upload end med HTTP
upload.

Man ved aldrig om web sereveren får lyst til at hive det hele ind i memory
eller først laver en temporær fil eller timer ud eller ...
Avatar billede arne_v Ekspert
12. januar 2005 - 12:27 #5
Men altså du kan tage PHP kode fra det andet spørgsmål og det
eneste du skal tilføje er at fiske filnavnet ud og kalde filen det.
Avatar billede iso Nybegynder
12. januar 2005 - 12:29 #6
Tak for hurtig svar.
Jeg har prøvet med PHP -koden fra spørgsmål: http://eksperten.dk/spm/516338, som er også lavet af dig:
<?php
//import_request_variables('p','p_');
$f = fopen("C:\\z.txt", "wb");
fwrite($f, $HTTP_RAW_POST_DATA);
fclose($f);
?>
Men,jeg kan ikke få det til at virke.
Hvis du kan lave det, så får du points.
Avatar billede iso Nybegynder
12. januar 2005 - 13:14 #7
Hej igen nu virker det. Her er PHP delen:
<?php
import_request_variables('g','g_');
$f = fopen($g_filename, "wb");
fwrite($f, $g_filename);
fclose($f);
?>
Takker og lukker spørgsmål.
Avatar billede iso Nybegynder
12. januar 2005 - 13:15 #8
Ops.
Avatar billede iso Nybegynder
12. januar 2005 - 13:17 #9
Hej arne_v. Giver du svar til accept?
Avatar billede arne_v Ekspert
12. januar 2005 - 13:25 #10
svar
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