cliente java usando arquivos de transferência http em massa para o servidor

Relatará exceção de estouro de pilha quando estes dias fazer um projeto problemas encontrados com o cliente java swing para o servidor fazer os arquivos de transferência de massa, a transferência ascendeu a 200M. Código é a seguinte:
byte [] Content = null;
            o try {
                FIN = new new FileInputStream (File);
                ByteArrayOutputStream OUT = new new ByteArrayOutputStream ();
                byte [] TEMP = new new byte [1024];
                int size = 0;
                o while ((size = FIN .read (TEMP)) = -1) {!
                    out.write (TEMP, 0, tamanho);
                }
                fin.close ();
                conteúdo = out.toByteArray ();
            } a captura (excepção E) {
                e.printStackTrace () ;
            }
Upload em massa é um round-robin para uma matriz de conteúdo para cada fluxo de arquivos enviados para o servidor, o nome do arquivo também é enviada para o servidor, e, em seguida, uma série de conteúdo escrito para o arquivo. Esta abordagem Ben colapso na máquina virtual arquivos maiores quantidade de java.
Minha solução é fazer o upload http método, ainda está fazendo um loop, como segue :( Clique no botão Upload na interface swing, faça o seguinte esta discussão)
Privado Cordas ServerAddress;
Static String privado HTTPHEAD = "http: //";
Static String privado HTTPTAIL = ": 8080 / WMS // ReceiveUploadFile";
Cordas uploadedfilesforlog privada = ""; // carregar o nome do arquivo de log para a preservação log
carregamento Runnable = new Runnable () {
public void run () {
Arquivo [] arquivos = fileChooser.getSelectedFiles ();
            if (files.length> 50) {
            JOptionPane.showMessageDialog (uploadFileDialog.this, "o número de upload de arquivos não pode ser superior a 50");
            uploadButton.setEnabled (true);
Retorna;
            }
StringBuffer uploadedfiles = novo StringBuffer ();
if (== null arquivos || files.length == 0) {
JOptionPane.showMessageDialog (uploadFileDialog.this, "você não selecionar arquivos de voz, selecione o arquivo de áudio carregado.");
uploadButton.setEnabled (true);
Retorna;
}
serveraddress = dsclient.getServerAddrss ();
para (int i = 0; i <files.length; i ++) {
Cordas TargetURL = null; // TODO 指定 URL
Arquivo targetfile = null; // TODO especificado de upload de arquivos
targetfile = arquivos [i];
TargetURL = HTTPHEAD + serveraddress + HTTPTAIL; // servleturl
PostMethod filePost = novo PostMethod (TargetURL);
//filePost.getParams().setContentCharset("utf-8" );
logger.info (filePost.getParams () getContentCharset ().);
experimentar {
// parâmetros de página pode ser simulada pelo método a seguir para enviar
Parte [] = {partes novo FilePart (targetFile.getName (), TargetFile)};
filePost.setRequestEntity (novo MultipartRequestEntity (partes,filePost.getParams ()));
HttpClient client = new HttpClient ();
client.getHttpConnectionManager () getParams () setConnectionTimeout (5000)..;
int status = client.executeMethod (filePost);
se (status == HttpStatus.SC_OK) {
if (saveAudioFileToDatabase (arquivos [i]). equals ( "carregamento falhou")) {
continuar;
}
uploadedfilesforlog + = uploadedfilesforlog.equals ( "")? arquivos [i] .getName (): "" + arquivos [i] .getName ();
SaveLog ( "sucesso");
logger.info (arquivos [i] .getName () + "upload bem-sucedido");
uploadedfiles.append ( "[");
uploadedfiles.append (arquivos [i] .getName ());
uploadedfiles.append ( "]");
if ((i + 1)% 5 == 0) {
uploadedfiles.append ( "<BR>");
}
} outro {
logger.info ( "carregamento falhou");
// carregamento falhou
}
} Catch (excepção ex) {
ex.printStackTrace ();
} finalmente {
filePost.releaseConnection ();
}
}
if (uploadedfiles.length () == 0) {
Retorna;
}
uploadButton.setEnabled (true);
ponta String = "<html> arquivo de voz <font color = 'vermelho'> <b>"+ Uploadedfiles.toString () + "</ b> </ font> upload bem-sucedido </ html>!";
JOptionPane.showMessageDialog (uploadFileDialog.this, ponta);
uploadFileDialog.this.setVisible (falso);
uploadFileDialog.this.dispose ();
audioFileManagement.loadList ();
}
};
服务器短接受代码:
importação java.io.File;
importação Java.io.IOException;
importação java.io.PrintStream;
importação java.util.Iterator;
importação java.util.List;
importação javax.servlet.ServletException;
importação javax.servlet.http.HttpServlet;
importação javax.servlet.http.HttpServletRequest;
importação javax.servlet.http.HttpServletResponse;
importação org.apache.commons.fileupload.FileItem;
importação org.apache.commons.fileupload.disk.DiskFileItemFactory;
importação org.apache.commons.fileupload.servlet.ServletFileUpload;
importação org.apache.log4j.Logger;
classe pública ReceiveUploadFile estende HttpServlet
{
  private static final long serialVersionUID = 1L;
  Logger logger = Logger.getLogger (ReceiveUploadFile.class);
  Cordas uploadPath privada = "/ var / lib / X1000 / sons / audiofile /";
  Cordas TempPath privada = "/ var / lib / X1000 / sons / audiofile / tampão /";
  TempPathFile arquivo;
  o init public void ()
    lança ServletException
  {
    Arquivo uploadFile = new File (this.uploadPath);
    if ((uploadFile.exists ())!)
      uploadFile.mkdirs ();
    Arquivo tempPathFile = new File (this.tempPath);
    if ((tempPathFile.exists ())!)
      tempPathFile.mkdirs ();
  }
  Protegido doGet void (HttpServletRequest pedido, HttpServletResponse resposta)
    lança ServletException, IOException
  {
    doPost (pedido, resposta);
  }
  DoPost public void (HttpServletRequest pedido, HttpServletResponse resposta)
    lança ServletException, IOException
  {
    fábrica DiskFileItemFactory;
    tente
    {
      fábrica = new DiskFileItemFactory ();
      factory.setSizeThreshold (4096);
      factory.setRepository (this.tempPathFile);
      ServletFileUpload upload = new ServletFileUpload (de fábrica);
      upload.setSizeMax (41943040L);
      Os itens da lista = upload.parseRequest (request);
      Repetidor i = items.iterator ();
      enquanto (i.hasNext ())
      {
        FileItem fi = (FileItem) i.next ();
        Corda nomeArquivo = fi.getName ();
        if (fileName! = null)
        {
          string filename = new String (fi.getName () getBytes (), "utf-8".);
          this.logger.info ( "=======================接收到语音文件的文件名:" + nome de arquivo);
          Arquivo Fullfile = new File (filename);
          Arquivo savedFile = new File (this.uploadPath, fullFile.getName ());
          fi.write (savedFile);
        }
      }
      System.out.print ( "upload sucesso");
    }
    Catch (exceção 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-startup > 4 </ load-on-startup > </ servlet > - <servlet-mapping > 
 
 
 
 
 

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

pacote dependente jar: commons-httpclient-3.1.jar, Commons-FileUpload-1.2.1.jar, Commons-CODEC-1.3.jar,
problemas encontrados: problema do lixo chinês, porque o httpclient 3.1.jar commons-pacote a codificação padrão não é UTF-8, ele é enviado para o servidor de nomes de arquivos do servidor chinês para resolver ilegível. Li um monte de métodos on-line
são definir a codificação, mas eu tentei, ou não, só podemos modificar o código fonte pacote jar. Um frasco de ready-made pacote de transferência UTF-8 de:

http://download.csdn.net/detail/wcbkanaz/3697109 , graças a usuários entusiastas.
Além disso, modificar o código fonte dentro quando o código são codificados no que você quer, de modo a garantir que o servidor pode ser resolvido corretamente.
http://download.csdn.net/detail/yuanxw44/4028099 , este endereço você pode baixar o código-fonte, descompacte os arquivos na cópia diretório pode estar dentro de java, necessidade de contar com dois pacotes diretório src sob o eclipse,
commons-logging.jar e commons-codec.jar, alterou novamente a brincar com fatjar.



commons-httpclient-3.1.jar
commons-fileupload-1.2.1.
commons-fileupload-1.2.1.
commons-codec-1.3.jar
Publicado 34 artigos originais · ganhou elogios 2 · vê 40000 +

Acho que você gosta

Origin blog.csdn.net/zjj2006/article/details/17171521
Recomendado
Clasificación