サーバーへのHTTPバルク転送ファイルを使用してJavaクライアント

これらの日は、バルク転送ファイルを実行するサーバーへのJava Swingクライアントとのプロジェクト直面する問題を行う際に、スタックオーバーフロー例外を報告し、転送が200Mに達しました。コードは次の通りれる:
バイト[]コンテンツ= NULL;
            試み{
                FIN =新しい新しいFileInputStreamを(ファイル);
                ByteArrayOutputStream OUT =新しい新しいByteArrayOutputStream();
                バイト[] TEMP =新しい新しいバイト[1024];
                int型のサイズ= 0;
                しばらく((サイズ= FINを.read(TEMP))= -1){!
                    out.write(TEMP、0、サイズ);
                }
                fin.close();
                コンテンツ= out.toByteArray();
            }キャッチ(例外e){
                e.printStackTrace() ;
            }
各ファイルストリームのコンテンツの配列へのラウンドロビン方式は、サーバーに送信された一括アップロードは、ファイル名は、サーバーに送信され、その後、コンテンツの配列をファイルに書き込みます。仮想マシン内のこのアプローチベンの崩壊は、javaのより大きな量をファイル。
私の解決策があるにアップロードHTTPメソッド、まだループをやっている、として次の:()以下、このスレッドを実行し、スイングインタフェースにアップロード]ボタンをクリックして
プライベート文字列serverAddressにします。
プライベート静的文字列HTTPHEAD = "のhttp://";
プライベート静的文字列HTTPTAIL = ":8080 / WMS // ReceiveUploadFile"。
プライベート文字列uploadedfilesforlog =「」; //は、ログ保存のためのログ・ファイル名をアップロード
実行可能なアップロードは=新しい実行可能(){
ます。public void実行(){
ファイル[]ファイル= fileChooser.getSelectedFiles();
            IF(files.length> 50){
            JOptionPane.showMessageDialog(uploadFileDialog.thisは、「アップロードファイルの数が50以上にすることはできません」);
            (真)uploadButton.setEnabled。
リターン;
            }
StringBufferのuploadedfiles =新しいStringBufferを();
もし(ヌル==ファイル|| files.length == 0){
JOptionPane.showMessageDialog(uploadFileDialog.thisは、「あなたは、音声ファイルを選択していない、アップロードされたオーディオファイルを選択します。」);
(真)uploadButton.setEnabled。
リターン;
}
serverAddressで= dsclient.getServerAddrss()。
{(I ++; I <files.length iが0 = INT)のために
文字列のTargetURL = NULL; // TODO指定URL
ファイルこのtargetFile = NULL; // TODO指定されたファイルのアップロード
このtargetFile =ファイル[i]は、
TargetURL = HTTPHEAD + serverAddressで+ HTTPTAIL。// servleturl
PostMethod filePostは新しいPostMethod(のTargetURL)を=。
//filePost.getParams().setContentCharset("utf-8" );
logger.info(filePost.getParams()getContentCharset()。)。
{試します
//ページパラメータは提出するには、以下の方法でシミュレートすることができます
一部[]部分= {新しいFilePart(targetFile.getName()、このtargetFile)}。
filePost.setRequestEntity(新しいMultipartRequestEntity(部品、filePost.getParams()))。
HttpClientをクライアント=新しいHttpClientを();
client.getHttpConnectionManager()のgetParams()setConnectionTimeout(5000)。。。
int型のステータス= client.executeMethod(filePost)。
IF(ステータス== HttpStatus.SC_OK){
もし(saveAudioFileToDatabase(ファイル[i])と。等号() "アップロードに失敗しました"){
継続する;
}
uploadedfilesforlog + = uploadedfilesforlog.equals( "")?ファイル[i]を.getName(): "" +ファイル[i]の.getName();
SAVELOG( "成功");
logger.info(ファイル[i]の.getName()+ "成功したアップロード");
uploadedfiles.append( "[")。
uploadedfiles.append(ファイル[i]の.getName());
uploadedfiles.append( "]");
IF((I + 1)%5 == 0){
uploadedfiles.append( "<BR>");
}
} そうしないと {
logger.info( "アップロードに失敗しました");
//アップロードに失敗しました
}
}キャッチ(例外例){
ex.printStackTrace();
} 最後に {
filePost.releaseConnection();
}
}
IF(uploadedfiles.length()== 0){
リターン;
}
(真)uploadButton.setEnabled。
文字列の先端= "<HTML>音声ファイル<フォント色= '赤'> <B>"+ Uploadedfiles.toString()+ "する</ b> </ font>アップロードに成功</ HTML>!";
JOptionPane.showMessageDialog(uploadFileDialog.this、チップ);
uploadFileDialog.this.setVisible(偽);
uploadFileDialog.this.dispose();
audioFileManagement.loadList();
}
};
服务器短接受代码:
インポートjava.io.Fileの。
インポートにjava.io.IOException;
インポートに、java.io.PrintStream;
インポートするjava.util.Iterator;
輸入はjava.util.List;
輸入javax.servlet.ServletException;
輸入javax.servlet.http.HttpServlet。
インポートのjavax.servlet.http.HttpServletRequest;
インポートのjavax.servlet.http.HttpServletResponse;
輸入org.apache.commons.fileupload.FileItem;
輸入org.apache.commons.fileupload.disk.DiskFileItemFactory。
輸入org.apache.commons.fileupload.servlet.ServletFileUpload;
輸入org.apache.log4j.Logger;
パブリッククラスReceiveUploadFileはHttpServletを拡張
{
  プライベート静的最終長いのserialVersionUID = 1Lと、
  ロガーロガー= Logger.getLogger(ReceiveUploadFile.class)。
  プライベート文字列uploadPath = "の/ var / libに/ X1000 /サウンド/オーディオファイル/";
  プライベート文字列TEMPPATH = "の/ var / libに/ X1000 /サウンド/オーディオファイル/バッファ/";
  ファイルtempPathFile;
  ます。public void initは()
    ServletExceptionがスロー
  {
    ファイルuploadFile =新しいファイル(this.uploadPathを)。
    (!(uploadFile.exists()))であれば
      uploadFile.mkdirs();
    ファイルtempPathFileは、新しいFile(this.tempPath)を=。
    (!(tempPathFile.exists()))であれば
      tempPathFile.mkdirs();
  }
  保護されたボイドのdoGet(HttpServletRequestのリクエスト、HttpServletResponseの応答)
    ServletExceptionが、IOExceptionがスロー
  {
    doPostメソッド(リクエスト、レスポンス)。
  }
  公共ボイドのdoPost(HttpServletRequestのリクエスト、HttpServletResponseの応答)
    ServletExceptionが、IOExceptionをスロー
  {
    DiskFileItemFactory工場;
    試す
    {
      工場=新しいDiskFileItemFactory();
      factory.setSizeThreshold(4096)。
      factory.setRepository(this.tempPathFile)。
      ServletFileUploadアップロード=新しいServletFileUpload(工場)。
      upload.setSizeMax(41943040L)。
      リスト項目= upload.parseRequest(リクエスト)。
      反復子i)は(items.iteratorを=。
      一方、(i.hasNext())
      {
        FileItem Fiの=(FileItem)i.next();
        文字列fileNameに= fi.getName()。
        (もし!fileNameに= NULL)
        {
          文字列のファイル名=新しい文字列(。fi.getName()GetBytesメソッド()、 "UTF-8");
          this.logger.info( "=======================接收到语音文件的文件名:" +ファイル名);
          ファイルのフルファイルは、新しいFile(ファイル名)=。
          ファイルsavedFile =新しいファイル(this.uploadPath、fullFile.getName());
          fi.write(savedFile)。
        }
      }
      System.out.print( "成功UPLOAD")。
    }
    キャッチ(例外e)
    {
      System.out.printlnは(e.getMessage())。
      e.printStackTrace();
    }
  }
}
web.xmlの
<サーブレット>
< サーブレット名> ReceiveUploadFile </ サーブレット名> < 表示名> ReceiveUploadFile </ 表示名> < 説明> ReceiveUploadFile </ 記述> < サーブレットクラス> com.gohigh.centrex.common.ReceiveUploadFile </ サーブレットクラス> < のload-on-startup > 4 </ のload-on-startup > </ サーブレット> - <servlet-mapping > 
 
 
 
 
 

  < サーブレット名> ReceiveUploadFile </ サーブレット名>
< のurl-pattern > / ReceiveUploadFile </ のurl-pattern > </ のservlet-mapping > 
 

依存するJARパッケージ:コモンズ-HTTPClientの-3.1.jar、コモンズ-するFileUpload-1.2.1.jar、コモンズ-CODEC-1.3.jar、
問題が発生しました:中国のゴミ問題、コモンズ-にHTTPClient-3.1.jarパッケージ理由デフォルトのエンコーディングは、それが文字化け解決するには、サーバー中国のファイル名のサーバーに送信され、UTF-8ではありません。オンラインメソッドの多くは読んで
エンコーディングを設定しているが、私が試した、またはではない、我々は唯一のjarパッケージのソースコードを変更することができます。既製パッケージのダウンロードUTF-8ののjarファイル:

http://download.csdn.net/detail/wcbkanaz/3697109、熱心なユーザーのおかげ。
また、サーバーが正しく解決できることを保証するように、コードはあなたが望むものにエンコードされたときに内部のソースコードを変更します。
http://download.csdn.net/detail/yuanxw44/4028099は、ディレクトリのコピー内のファイル解凍し、ソースコードをダウンロードすることができ、このアドレスは、Javaの内部で、必要性が日食の下に二つのパッケージSRCディレクトリに依存することができます
コモンズ-logging.jarとコモンズ - codec.jar、再びfatjarで遊んで修正しました。



コモンズ-HTTPClientの-3.1.jar
コモンズ・ファイルアップロード-1.2.1。
コモンズ・ファイルアップロード-1.2.1。
コモンズ・コーデック-1.3.jar
公開された34元の記事 ウォンの賞賛2 ビュー40000 +

おすすめ

転載: blog.csdn.net/zjj2006/article/details/17171521