client java à l'aide des fichiers de transfert de vrac http au serveur

Fera rapport exception de débordement pile lorsque ces jours -ci font un projet avec les problèmes rencontrés client java swing au serveur faire les fichiers de transfert de vrac, le transfert est élevé à 200M. Code est la suivante:
octet [] Contenu = null;
            try {
                FIN = new nouveau FileInputStream (fichier);
                ByteArrayOutputStream OUT = new new ByteArrayOutputStream ();
                octet [] TEMP = new new byte [1024]; la
                taille int = 0;
                le while ((size = FIN .read (TEMP)) = -1) {!
                    out.write (TEMP, 0, taille);
                }
                fin.close ();
                contenu = out.toByteArray ();
            } le catch (Exception e) {
                e.printStackTrace () ;
            }
transfert groupé est un round-robin à un tableau de contenu pour chaque flux de fichier envoyé au serveur, le nom du fichier est également envoyé au serveur, puis un tableau de contenu écrit dans le fichier. Cette approche effondrement Ben dans la machine virtuelle fichiers plus grande quantité de java.
Ma solution est de télécharger méthode http, fait encore une boucle, comme suit :( Cliquez sur le bouton Télécharger sur l'interface swing, procédez comme suit ce fil)
privé Chaîne ServerAddress;
String private static HTTPHEAD = "http: //";
String private static HTTPTAIL = ": 8080 / wms // ReceiveUploadFile";
private String uploadedfilesforlog = « »; // télécharger le nom du fichier journal pour la sauvegarde du journal
Runnable télécharger = new Runnable () {
public void run () {
[Fichier] = fichiers fileChooser.getSelectedFiles ();
            si (files.length> 50) {
            JOptionPane.showMessageDialog (uploadFileDialog.this, « le nombre de fichiers de téléchargement ne peut pas être plus de 50 »);
            uploadButton.setEnabled (true);
revenir;
            }
StringBuffer Uploadedfiles = new StringBuffer ();
if (null == files.length || fichiers == 0) {
JOptionPane.showMessageDialog (uploadFileDialog.this, « vous faites des fichiers vocaux ne sélectionnez, sélectionnez le fichier audio téléchargé. »);
uploadButton.setEnabled (true);
revenir;
}
serveraddress = dsclient.getServerAddrss ();
pour (int i = 0; i <files.length; i ++) {
Chaîne URL_cible = null; // TODO URL 指定
Fichier TargetFile = null; // téléchargement de fichier spécifié TODO
TargetFile = fichiers [i];
targetURL = HTTPHEAD + serveraddress + HTTPTAIL; // servleturl
PostMethod FilePost = new PostMethod (targetURL);
//filePost.getParams().setContentCharset("utf-8" );
logger.info (filePost.getParams () getContentCharset ().);
try {
// paramètres de page peuvent être simulés par la méthode suivante pour présenter
Partie [] = {new parties FilePart (targetFile.getName (), TargetFile)};
filePost.setRequestEntity (nouveau MultipartRequestEntity (parties,filePost.getParams ()));
HttpClient client = new HttpClient ();
client.getHttpConnectionManager () getParams () setConnectionTimeout (5000)..
int status = client.executeMethod (FilePost);
si (état == HttpStatus.SC_OK) {
si (saveAudioFileToDatabase (fichiers [i]). equals ( "téléchargement a échoué")) {
continuer;
}
uploadedfilesforlog + = uploadedfilesforlog.equals ( "")? fichiers [i] .getName (): "" + fichiers [i] .getName ();
savelog ( "succès");
Logger.INFO (fichiers [i] .getName () + "upload réussi");
uploadedfiles.append ( "[");
uploadedfiles.append (fichiers [i] .getName ());
uploadedfiles.append ( "]");
if ((i + 1)% 5 == 0) {
uploadedfiles.append ( "<BR>");
}
} autre {
logger.info ( "téléchargement a échoué");
// téléchargement a échoué
}
} Catch (Exception ex) {
ex.printStackTrace ();
} enfin {
filePost.releaseConnection ();
}
}
si (uploadedfiles.length () == 0) {
revenir;
}
uploadButton.setEnabled (true);
Chaîne pointe = "<html> fichier vocal <font color = 'red'> <b>"+ Uploadedfiles.toString () + "</ b> </ font> télécharger avec succès </ html>!";
JOptionPane.showMessageDialog (uploadFileDialog.this, bout);
uploadFileDialog.this.setVisible (false);
uploadFileDialog.this.dispose ();
audioFileManagement.loadList ();
}
};
服务器短接受代码:
import java.io.File;
importation java.io.IOException;
importation java.io.PrintStream;
importation java.util.Iterator;
importation java.util.List;
importation javax.servlet.ServletException;
importation javax.servlet.http.HttpServlet;
importation javax.servlet.http.HttpServletRequest;
importation javax.servlet.http.HttpServletResponse;
importation org.apache.commons.fileupload.FileItem;
importation org.apache.commons.fileupload.disk.DiskFileItemFactory;
importation org.apache.commons.fileupload.servlet.ServletFileUpload;
importation org.apache.log4j.Logger;
public class ReceiveUploadFile étend HttpServlet
{
  finale statique privée de serialVersionUID = 1 litre;
  Enregistreur Enregistreur = Logger.getLogger (ReceiveUploadFile.class);
  private String uploadPath = "/ var / lib / X1000 / sons / audiofile /";
  private String tempPath = "/ var / lib / X1000 / sons / audiofile / buffer /";
  TempPathFile fichier;
  initialisation public void ()
    lance ServletException
  {
    Fichier UploadFile = new File (this.uploadPath);
    if ((uploadFile.exists ())!)
      uploadFile.mkdirs ();
    Fichier tempPathFile = new File (this.tempPath);
    if ((tempPathFile.exists ())!)
      tempPathFile.mkdirs ();
  }
  Void doGet protégé (HttpServletRequest demande, réponse HttpServletResponse)
    jette ServletException, IOException
  {
    doPost (requête, réponse);
  }
  DoPost public void (HttpServletRequest demande, réponse HttpServletResponse)
    jette ServletException, IOException
  {
    usine DiskFileItemFactory;
    essayer
    {
      usine = new DiskFileItemFactory ();
      factory.setSizeThreshold (4096);
      factory.setRepository (this.tempPathFile);
      Upload ServletFileUpload = new ServletFileUpload (usine);
      upload.setSizeMax (41943040L);
      Liste des articles = upload.parseRequest (demande);
      Itérateur i = items.iterator ();
      while (i.hasNext ())
      {
        FileItem fi = (FileItem) i.next ();
        Chaîne filename = fi.getName ();
        si (fileName! = null)
        {
          chaîne filename = new String (fi.getName () getBytes (), "utf-8".);
          this.logger.info ( "=======================接收到语音文件的文件名:" + filename);
          Fichier Fullfile = new File (nom de fichier);
          Fichier savedFile = new File (this.uploadPath, fullFile.getName ());
          fi.write (savedFile);
        }
      }
      System.out.print ( "upload réussir");
    }
    Catch (Exception e)
    {
      System.out.println (e.getMessage ());
      e.printStackTrace ();
    }
  }
}
Web.xml
<servlet >
< servlet-name > ReceiveUploadFile </ servlet-name > < display-name > ReceiveUploadFile </ display-name > < Description > ReceiveUploadFile </ Description > < servlet-class > com.gohigh.centrex.common.ReceiveUploadFile </ servlet-class > < load-on-démarrage > 4 </ load-on-startup > </ servlet > - <servlet-mapping > 
 
 
 
 
 

  < Servlet-name > ReceiveUploadFile </ servlet-name >
< url-pattern > / ReceiveUploadFile </ url motif > </ servlet-mapping > 
 

paquet de pot à charge: commons-httpclient-3.1.jar, communes-FileUpload-1.2.1.jar, communes-CODEC-1.3.jar,
les problèmes rencontrés: problème des ordures chinois, parce que les communes-httpclient-3.1.jar paquet l'encodage par défaut n'est pas UTF-8, il est envoyé au serveur serveur de noms de fichier chinois pour résoudre brouillées. Lire beaucoup de méthodes en ligne
sont mis en encodage, mais j'ai essayé, ou pas, nous ne pouvons modifier le code source du package jar. Un pot de l' emballage prêt-à-Télécharger UTF-8 de:

http://download.csdn.net/detail/wcbkanaz/3697109 , grâce à des utilisateurs enthousiastes.
En outre, modifier le code source à l'intérieur lorsque le code sont encodées dans ce que vous voulez, de manière à assurer que le serveur peut être résolu correctement.
http://download.csdn.net/detail/yuanxw44/4028099 , cette adresse , vous pouvez télécharger le code source, Décompressez les fichiers dans la copie de répertoire peut être à l' intérieur java, le besoin de compter sur le répertoire deux paquets sous l'éclipse,
commons-logging.jar et commons-codec.jar, révisé Retrouvant avec fatjar.



commons-httpclient-3.1.jar
commons-fileUpload-1.2.1.
commons-fileUpload-1.2.1.
commons-codec-1.3.jar
Publié 34 articles originaux · a gagné les éloges 2 · vues 40000 +

Je suppose que tu aimes

Origine blog.csdn.net/zjj2006/article/details/17171521
conseillé
Classement