Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 02-01-2006, 23.46.19   #1
GiulioCesare
Senior Member
 
L'avatar di GiulioCesare
 
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
GiulioCesare promette bene
[Java] Upload file

Salve ragazzi, qualcuno saprebbe come fare, per eseguire un upload di un file, in java? Preferibilmente senza usare una servlet.
GiulioCesare non è collegato   Rispondi citando
Vecchio 05-01-2006, 11.31.29   #2
GiulioCesare
Senior Member
 
L'avatar di GiulioCesare
 
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
GiulioCesare promette bene
Sto provando con questo codice trovato in rete, ma viene segnalato l'errore nel main, il quale
dice di non riconoscere l'operatore new. Penso che l'errore sia nel come chiamo la servlet,
visto che non so proprio come riuscire a chiamarla, e soprattutto come passargli, il file
che dovrà poi trasportare su un altro pc, comunque posto qui sotto il codice con la speranza che
qualcuno mi aiuti.
Codice:
public void Upload(HttpServletRequest r,String uploadDir) throws IOException {
    req = r;
    dir = uploadDir;
    upload();
  }

  /**
   * The method reads the next line from the servlet input stream into a byte 
   * array and returns a String form of the array.Returns null if it reaches the 
   * end of the stream
   * @return <b>String</b> The next line in the stream
   * @throws <b>IOException</b>  - If there was a problem reading the stream or
   */
  private String readLine() throws IOException {
    int len = 0;
    String line = null;
    len= in.readLine(buff,0,buff.length);
    if (len<0) return null;
    line = new String(buff,0,len, "ISO-8859-1");

    return line;
  }

  /**
   * The method loops through the lines in the input stream and calls 
   * writeToFile() if it encounters a file and readParam() if it encounters a
   * form field
   * @throws <b>IOException</b>  - If there was a problem reading the stream or
   */
  public void upload() throws IOException{
    // Set the boundary string
    setBoundary();
  
    // The request stream
    in = req.getInputStream();
    int len = 0;

      // the first line is the boundary , ignore it
       String line = readLine();
    while((line= readLine())!=null) {
      // set dispostion, param name and filename
      setHeaders(line);

      // skip next line
      line=readLine();

      // if there is a content-type specified, skip next line too,
      // and this is a file, so upload it to the file system
      if(line.toLowerCase().startsWith("content-type")){
         line=readLine();
         writeToFile();
         continue;
      } else {
         // its  a form field, read it.
         readParam();
      }
    }
  }

 /**
  * Sets the boundary string for this request
  */
  private  void setBoundary()throws IOException{
    String temp = req.getContentType();
    int index = temp.indexOf("boundary=");
    boundary += temp.substring(index+9,temp.length());
  }


 /**
  * Reads the form field and puts it in to a table
  */
  private void readParam() throws IOException{
    String line  = null;
    StringBuffer buf=  new StringBuffer();
    while (!(line=readLine()).startsWith(boundary)){
       buf.append(line);
    }
    line = buf.substring(0,buf.length()-2);
    if(map.containsKey(paramName)) {
       Object existingValue = map.get(paramName);
       List valueList = null;
       if( existingValue instanceof List) {
          valueList = (List)existingValue;
       } else {
          valueList=  new ArrayList();
          valueList.add(existingValue);
       }
       valueList.add(line);
       map.put(paramName,valueList);
    }
    map.put(paramName,line);
  }
 
  /**
   * Sets the content disposition, param name and file name fields
   * @param <b>line</b> the content-disposition line
   */
  public  void setHeaders( String line){
    StringTokenizer tokens =  new StringTokenizer(line,";",false);
    String token = tokens.nextToken();
    String temp  = token.toLowerCase();
    int index    = temp.indexOf("content-disposition=");

    contentDisp = token.substring(index+21,token.length());
    token =  tokens.nextToken();
    temp = token.toLowerCase();
    index = token.indexOf("name=");
    paramName = token.substring(index+6,token.lastIndexOf('"'));
    fileName = null;

    if (tokens.hasMoreTokens()) {
        token =  tokens.nextToken();
        temp = token.toLowerCase();
        index = token.indexOf("filename=");
        fileName = token.substring(index+10,token.length());
        index = fileName.lastIndexOf('/');
        if(index<0) {
          index = fileName.lastIndexOf('\\');
        }
        if(index <0) {
          fileName = fileName.substring(0,fileName.lastIndexOf('"'));
        } else {
          fileName = fileName.substring(index+1,fileName.lastIndexOf('"'));
        }
    }
  }

  /**
   * Reads the file content from the stream and writes it to the local file system
   * @throws <b>IOException</b>  - If there was a problem reading the stream 
   */
  private void writeToFile() throws IOException{
     // Open an o/p stream
     FileOutputStream out = new FileOutputStream (dir+File.separator+fileName);

     // this flag checks if \r\n needs to be written to the file
     // the servlet output stream appends these characters at the end of the 
     // last line of the content, which should be skipped
     // so in the loop, all \r\n but for the last line are written to the file
     boolean writeCR = false;
     int len = 0;
     String line = null;
     map.put(paramName,fileName);

     // for each line
     while((len=in.readLine(buff,0,buff.length))>-1) {
       line =  new String(buff,0,len);

        // if end of content, break
        if (line.startsWith(boundary)) break;
        if(writeCR){
          writeCR=false;
          out.write('\r');
          out.write('\n');
        }
        if(len>2 && buff[len-2]=='\r' && buff[len-1]=='\n') {
          writeCR=true;
          out.write(buff,0,len-2);
        } else {
          out.write(buff,0,len);
        }
      }
            out.close();
   }

  /**
   * Returns the value of a request parameter as a String, or null if 
   * the parameter does not exist.The method overrides parent method.
   * @param <b>name</b> The name of the parameter
   * @return <b>String </b> The value of the paramter
   */
  public String getParameter( String name ) {
    Object val = map.get(name);
    if(val instanceof String) {
      return (String)val;
    } else {
      List vals = (List)val;
      return (String)vals.get(0);
    }
  }
  
  /**
   * Returns an Enumeration of String objects containing the names of the 
   * parameters contained in this request. If the  request has no parameters, 
   * the method returns an empty Enumeration.The method overrides parent method.
   * @return <b>Enumeration </b>of String objects, each String containing the 
   * name of a request parameter; or an empty Enumeration if the request has 
   * no parameters
   */
  public java.util.Enumeration getParameterNames() {
    return map.keys();
  }

  /**
   * Returns an array of String objects containing all of the values the given 
   * request parameter has, or null if the parameter does not exist.
   * The method overrides parent method.
   * @param <b>name</b> the name of the parameter whose value is requested
   * @return <b><String[]</b> an array of String objects containing the 
   * parameter's values
   */
  public String[] getParameterValues( String name ) {
    Object val = map.get(name);
    if(val instanceof String){
      return new String[]{(String)val};
    } else {
      List vals = (List)val;
      return (String[])vals.toArray(new String[vals.size()]);
    }
  }
  
  public static void main(String[] args)
  {
	Upload a = new Upload("C:/Java_Gio/word.cs");
	
  }
GiulioCesare non è collegato   Rispondi citando
Vecchio 05-01-2006, 11.42.33   #3
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Ma esiste una classe Upload? Nel senso: se ce l'hai, prova a fare l'import della classe all'inizio del file (occorre metterla nel path di lavoro dell'IDE)... se invece ti riferisci ad Upload che vedo all'inizio del codice beh, quello è un metodo, non si puà istanziare

Puoi però chiamare quel metodo, a patto però che sia static (dal main, che è static, si possono chiamare solo metodi static), ovvero la sua signature sia del tipo

public void static Upload blablabla...

Altrimenti, per non rendere il metodo Upload static, devi istanziare un oggetto (di tipo già esistente o creato da te) che nel proprio metodo di creazione chiami questo metodo Upload di questa classe (che non so come si chiami) o che cmq chiami un altro metodo che a sua volta chiami questo metodo Upload, sempre con i giusti parametri...

Spero di essermi spiegato e di non esser stato contorto
Dav82 non è collegato   Rispondi citando
Vecchio 05-01-2006, 11.45.00   #4
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Uhm... mi sa che ho detto una cassata dietro l'altra... spè eh... che sono ancora addormentato... controllo
Dav82 non è collegato   Rispondi citando
Vecchio 05-01-2006, 11.51.18   #5
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Ecco no ok non ero addormentato

Il problema in effetti c'è, solo che sembra tutto corretto, mentre in realtà non lo è.

Il "public void Upload(HttpServletRequest r,String uploadDir) throws IOException" è un metodo scritto così, e non un costruttore (che non ha tipo di ritorno, poichè il tipo di ritorno è quello della classe cui appartiene). Basta togliere "void" e diventa un costruttore della classe e tutto funziona
Dav82 non è collegato   Rispondi citando
Vecchio 05-01-2006, 12.50.58   #6
GiulioCesare
Senior Member
 
L'avatar di GiulioCesare
 
Registrato: 02-04-2003
Loc.: Roma
Messaggi: 313
GiulioCesare promette bene
Si scusa, ma il problema del void nel costruttore era un errore di trascrizione, il problema rimane anche levando il void, come ho detto nel precedente post, penso che tutto dipenda dai parametri del costruttore, forse bisogna passare anche l'oggetto HttpServletRequest?
Se in quel caso fosse così, che parametro sarebbe necessario passare?
GiulioCesare non è collegato   Rispondi citando
Vecchio 05-01-2006, 13.03.50   #7
uolli
Newbie
 
Registrato: 12-09-2005
Messaggi: 3
uolli promette bene
http://jakarta.apache.org/commons/fileupload/
uolli non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
[Java] come scrivere in una riga specifica dentro un file di testo. DesmoColo Programmazione 1 30-07-2005 14.21.51
Problema con eMule SuperPippo105 Software applicativo 6 11-05-2005 11.56.33
Imaging e Win Xp Cico2000 Windows 7/Vista/XP/ 2003 6 15-04-2005 19.01.01
TABS GATTACAMOMILLA Masterizzazione Giochi Games 2 04-04-2005 17.52.38
problema con file .doc rovinato in office xp 2003...poi risolto... cippico Office suite 0 30-04-2004 09.12.07

Orario GMT +2. Ora sono le: 16.06.33.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.