この記事では、javawebマルチファイルのアップロードとzipパッケージングとダウンロードの特定のコードを参照して共有しています。特定のコンテンツは次のとおりです
ファイルアップロードおよびダウンロード機能は、プロジェクトでよく使用されます。この記事では、Javaweb環境のシーン、マルチファイルのアップロード、バッチパッケージング、およびフロントデスクやバックエンドパーツなどの機能をダウンロードします。
まず第一に、それを明確にしましょう:
ページをAjaxリクエストを直接更新することはできず、リクエストをダウンロードしてアップロードすることは送信できません。アップロードとダウンロードは、ページリクエスト全体に基づいて実装する必要があります。この関数は、一般に、プロジェクトにフォームフォームを構築することによって達成されます。
1.複数のファイルをアップロードします
プロジェクトの要件は、マルチイメージのアップロード機能を実現することです。インターネットで見つかった多くのプラグインメソッドを参照した後、私は元のjQueryアップロードソリューションを選択することにしました。以下の手順に従って、特定のコードを投稿してください。
1。HTMLパーツ(JSでビルドするために省略できます)
<form id = "uploadform" method = "post" enctype = "multipart/form-data"> <入力タイプ= "file" hidden name = "fileimage" bulthing/> <a href = "javascript:void(0);" rel = "external nofollow" rel = "external nofollow" id = "filesubmit" onclick = "uploadfilemulti()"> upload情報</a> </form>
いくつかの説明があります:
1。enctype = "multipart/form-data"フォーム
2。例では、タグを使用して送信をビルドします
2。JSパーツ
var formdata = new formdata($( "#uploadform")[0]); formdata.append( "foldname"、 "datumlist"); //親フォルダー名formdata.append( "odercode"、selfordercode); formdata.append( "datumtype"、datumtype); $。ajax({type: "post"、data:formdata、url: "order/datumlist/batchintdatumlists:contentttepe:false、false、false fucture:" order/datumlists "、fals (success){#fileimage ")。 }、error:function(){showerrortoast( '要求に失敗!')}});上にいくつかの説明があります:
1。varformdata = new formdata($( "#uploadform")[0]);
2。formdata.append( "odercode"、selfordercode)を使用します。他のパラメーターを追加します
Javaバックエンド
MultiParthTTPSERVLETREQUEST MREQUEST =(MultiParthTTPSERVLETREQUEST)request; list <MultiPartFile> files = mrequest.getFiles( "fileimage");
上にいくつかの説明があります:
1.ファイルタグの名前に対応するMultiParthTTPSERVLETREQUESTを取得します
2。ファイルのバッチダウンロード
このプロジェクトでは、要件はバッチ内のファイルのバッチをダウンロードすることです。 zipを使用してサーバー上のファイルを圧縮し、クライアントにファイルをダウンロードします。
オンラインクエリの場合、Java独自のファイル出力クラスを使用することで、圧縮ファイルに文字化けされたファイル名の問題を解決できません。解決策:ant.jarパッケージを使用します。圧縮されたファイルを作成するときは、ファイルのエンコード形式を設定でき、文字化けされたファイル名の問題が解決されます。
HTMLパーツ(JSでビルドするために省略できます)
<form id = "uploadform" method = "post" enctype = "multipart/form-data"> <div> <input type = "hidden" name = "ordercode"/> <入力タイプ= "hidden" name = "datumtype"/> <a href = "javascript:void(0);" rel = "外部nofollow" rel = "external nofollow" onclick = "batchdatumlistdownload()"> batchdown </a> </div> </form>
JSパート
// batchダウンロードfunction batchdatumlistdownload(){var param = {}; param.datumtype = $( "#datumtypeq")。val(); if(param.datumtype == -1){param.datumtype = null; // chery all} param.ordercode = selfordercode; $( "#uploadform input [name = ordercode]")。val(param.ordercode); $( "#uploadform input [name = datumtype]")。val(param.datumtype); var form = $( "#uploadform")[0]; form.action = "order/datumlist/batchdownloaddatumlist"; form.method = "post"; form.submit(); // form submit}バックエンドパーツ
public void batchdownloaddatumlist(datumlistvo datumlistvo、httpservletresponse応答){try {// query file list <datumlistvo> volist = datumlistservice.querydatumlists(datumlistvo); //ファイルリストを圧縮<ファイル>ファイル= new ArrayList <>(); for(datumlistvo:volist){file file = new file(vo.getDatumurl()); files.add(file); } string filename = datumlistvo.getOrderCode() + "_" + datumlistvo.getDatumtype() + ".zip"; //サーバー側にパッケージ化されたダウンロード用の一時ファイルを作成しますstring globaluploadpath = ""; string osname = system.getProperty( "os.name"); if(osname.tolowercase()。indexof( "windows")> = 0){globaluploadpath = globalkeys.getString(globalkeys.windows_upload_path); } else if(osname.tolowercase()。indexof( "linux")> = 0 || osname.tolowercase()。indexof( "mac")> = 0){globaleuploadpath = globalkeys.getString(globalkeys.linux_upload_path); } string outfilepath = globaluploadpath + file.separator + filename;ファイルfile = new file(outfilepath); //ファイル出力ストリームfileoutputStream OutStream = new FileOutputStream(file); // zipoutputStream toclient = new ZipOutputStream(outstream)を圧縮する; //圧縮ファイルでキャラクターエンコードを設定すると、それ以外の場合は、client.setEncoding( "gbk"); ziputil.zipfile(files、toclient); toclient.close(); outstream.close(); ziputil.downloadzip(file、response); } catch(Exception e){e.printstacktrace(); }}その中にはziputil.java
/** *圧縮ファイルリストのファイル * * @paramファイル * @param outputStream * @throws ioexception */public static void zipfile(list files、zipoutputstream outputstream)throws ioexception、servletexception {try {int size = files.size.size(); //(int i = 0; i <size; i ++){file file =(file)files.get(i);の圧縮リスト内のファイルtry {zipfile(file、outputStream); } catch(例外e){続行; }}} catch(例外e){show e; }}/** *ファイルをzipファイルに書き込みます * * @param inputfile * @param outputStream */public static void zipfile(ファイルinputfile、zipoutputStream outputStream)IoException、servletexception {try estermapream {if(inputfile.exists(){file infut.fiutfile(filein){inputfile.ispile(file infir) fileInputStream(inputFile); bufferedinputStream binstream = new BufferedInputStream(instream); zipentry entry = new Zipentry(inputfile.getName()); outputStream.putNextEntry(entry); final int max_byte = 10 * 1024 * 1024; //最大ストリームは10mの長さのstreamtotal = 0です。 //受け入れるストリームの容量int streamnum = 0; //分離する必要があるストリームの数int reversebyte = 0; // byte [] inoutbyteに残っている文字の数。 // byte配列は、ファイルstreamtotal = binstream.abailable()のデータを受け入れます。 //ストリームの最大文字数は、利用可能な方法Streamnum =(int)math.floor(streamtotal /max_byte)を介して取得されます。 //ストリームファイルの取得のために分離される文字の数resherebyte =(int)streamtotal%max_byte; //ファイルを分割した後、残りの数値if(streamnum> 0){for(int j = 0; j <streamnum; ++ j){inoutbyte = new byte [max_byte]; //ストリームで読み取り、バイト配列binstream.read(inoutbyte、0、max_byte)に保存します。 outputStream.write(inoutbyte、0、max_byte); //ストリームを書き留めてください}} //残りのストリームデータを書き留めますinoutbyte = new byte [reversbyte]; binstream.read(inoutbyte、0、reavebyte); outputStream.write(inoutbyte); outputStream.CloseEntry(); //現在のzipエントリを閉じ、次のエントリBinstream.close()を作成するためのストリームを配置します。 // close entream.close(); }} else {throw new servletexception( "ファイルは存在しません!"); }} catch(ioexception e){shop e; }}/** *パッケージファイルをダウンロード * * @param file * @param Response */public static void downloadzip(file、httpservletresponse応答){try {//ファイルをストリームとしてダウンロードします。 BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file.getPath())); byte [] buffer = new byte [fis.abailable()]; fis.read(buffer); fis.close(); //応答応答をクリアしますResponse.reset(); outputStream toClient = new BufferedOutputStream(Response.GetOutputStream()); Response.setContentType( "Application/Octet-Stream"); Response.setheader( "content-disposition"、 "attachment; filename =" + file.getName()); toclient.write(buffer); toclient.flush(); toclient.close(); file.delete(); //生成されたサーバー側ファイルを削除} catch(ioException ex){ex.printstacktrace(); }}上記は基本的に、ファイルのアップロードとダウンロードの要件を満たしています。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。