この記事では、Javaバックグラウンドバッチダウンロードファイルの特定のコードを共有し、参照のためにそれらをzipダウンロードに圧縮します。特定のコンテンツは次のとおりです
プロジェクトのニーズにより、サーバー上の画像ファイルは圧縮およびパッケージ化され、ローカルデスクトップにダウンロードされます。
まず、フロントエンドJS:
function doquerypic(){var picsdate = $( "#picsdate")。val(); var pianodate = $( "#picdate")。val(); var picinst = $( "#pic_inst")。combotree( "getValue"); var svrcode = $( "#pic_svr_code")。val(); var picstime = $( "#pic_stime")。val(); var pianotime = $( "#pic_etime")。val(); if(svrcode == null){$ .messager.alert( 'hint'、 "トランザクションクエリコードを入力してください");戻る; } else {$ .ajax({type: "post"、url: 'querypic.translog.action'、data:{f_brno:picinst、f_sdate:picsdate、f_edate:picdate、f_svr_code:svrcode、f_stime:f_etime、f_etime:fietime:fiktime} if(rcdata.success){var rows = rcdata.picinfo; all </th> <th style = 'width:10%; text-align:center-align'> date </th style = 'width:10%; text-align:center'> date </th> <th style = 'width:10%; center'>画像はありますか</th> <th style = 'width:23%;'> < 10%; Text-align:center '>取引ステータス</th> <th style =' width:12%; text-align:center '>デバイス番号</th> <th style =' width:10%; center '>トレーディングコード</th style =' width:10%; text-align:center < time </th> </tr> </thead> <tbody> "; /> </td> <td> " + rows [i] .f_date +" </td> <td> " + rows [i] .ishasimg +" </td> <td> " + rows [i] .f_tx_name +" </td> <td> " + rows [i] .f_stus +" + " + <td>" rows [i] .f_dev_id + "</td> <td>" + rows [i] .f_svr_code + "</td> <td>" + rows [i] .f_svr_code + "</td> <td>" + rows [i] .fbbrno + "</td> <td> lows +" + rows + 「</td> </tr>」; detailhtml + "</tbody.getelementbyid(" internhtml = defaryhtml; }}); }}}上記のコードは、関連するデータを照会した後にインターフェイスに表示され、顧客のニーズに応じて、ダウンロードおよび保存するデータを選択できます。
添付チェックボックスすべて/キャンセルすべてのJSコードを選択します
// checkbox all/cancelを選択するすべてのvar ischeckall = false; function swapcheck(){if(ischeckall){$( "入力[type = 'checkbox']")。 ischeckall = false; } else {$( "input [type = 'checkbox']")。各(function(){this.checked = true;}); ischeckall = true; }}次のコードは、バックグラウンドインタラクションに使用されます。ファイルをダウンロードする場合は、AJAXを使用してデータを送信しないでください。私は前にそれをしました、そしてそれをダウンロードすることができませんでした。一日だけ発見しました。コメント部分はAjaxコードです。あなたはそれを参照として見ることができます:
function downloadpic(){var arr = new array(); var picids = document.getElementsByname( "PictureId"); for(i = 0; i <picids.length; i ++){if(picids [i] .Checked){arr.push(picids [i] .value); }} if(arr.length <= 0){$ .messager.alert( 't prompt'、 "no download content!");戻る; } else {$( '#formpic')。 $( "#formpic")。form( 'submit'、{onsubmit:function(){}、success:function(data){$ .messager.alert( 'hint'、 'image download'、 'info');}}); /***$。ajax({type: "post"、url: 'downloadpic.translog.action'、data:{picturelist:json.stringify(arr)}、success:function(rcdata){if(rcdata.success){$ .messager.show({$ .messg.ers '; success'、success '、success'、success '、success'、success } else {$ .messager.alert( 'hint'、rcdata.errmsg) */}}次は、背景の相互作用、まず第一に、コントローラー制御レイヤーです。
/** *画像バッチダウンロード * @param request * @param Response * @return * @throws ioexception */public void downloadpic(httpservletrequest request、httpservletresponse応答){// map <string、object> params = getParameters(リクエスト); string [] pictureids = request.getParametervalues( "PictureId");認証au = getauthentication(request); service.downloadpic(pictureids、au、request、response);戻る ; }サービスレイヤー:
public void downloadPic(String [] Params、Authentication Au、Httpservletrequestリクエスト、httpservletresponse応答)throws ioexception {//圧縮ファイルstring path = system.getProperty( "ics.webapp.root"); filezip = au.getusername()+" - "+au.getattribute( "f_brno")+"pictures.zip"; string filepath = path + "//" + filezip; // zipファイルを生成するために使用されます// filepatharrは、フォアグラウンドから送信された情報(特に接尾辞)リストに基づいてデータベースクエリを介して取得されたPDFファイルパスのセットです<マップ<文字列、オブジェクト>> filenamearr = new arraylist << // jsonarray jsons = jsonarray.fromobject(paramseg( "picturelist")); /***list <string> pictureids = new ArrayList <String>(); for(object obj:jsons){pictureids.add(obj.tostring()); } */ for(int i = 0; i <params.length; i ++){map <string、object> spemap = new hashmap <string、object>(); spemap.put( "f_date"、params [i] .substring(0、8)); spemap.put( "f_ics_batch"、params [i] .substring(8)); List <Map <String、Object >> Reclists = Dao.QueryLoginfo(Spemap); for(int j = 0; j <reccists.size(); j ++){filenamearr.add(ricist.get(j)); }} //ファイルアドレスとファイル名を圧縮する必要があるファイル// string [] pathtytyt = {"d://13.jpg"、 "d://1212.jpg"}; //生成される圧縮されたファイルアドレスとファイル名//文字列despath = "d://downloads//new.zip";ファイルzipfile = new file(filepath); zipoutputstream zipstream = null; fileInputStream zipsource = null; BufferedInputStream BufferStream = null; try {//最終圧縮パッケージの出力ストリームを作成zipstream = new zipoutputStream(new fileoutputStream(zipfile)); for(int i = 0; i <filenamearr.size(); i ++){file file = new file((string)filenamearr.get(i).get( "f_filename"); // file file = new file(pathtytyt [i]); //入力ストリームに圧縮する必要があるファイルをフォーマットzipsource = new fileinputStream(file); //圧縮エントリは特定の独立したファイルではありませんが、インデックスと同様に、エントリと呼ばれる圧縮パッケージファイルのリストに項目をリストします//ここにある名前はファイル名であり、ファイルの複製によりファイルが上書きされます。ここで、i Plusファイル名は単一のファイル認識Zipentry Zipentry = new Zipentry(i+file.getName())に使用されます。 //圧縮エントリの場所を見つけ、圧縮パッケージzipstream.putnextentry(zipentry)にファイルの書き込みを開始します。 //入力bufferstream = new BufferedInputStream(Zipsource、1024 * 10); int read = 0; //読み取りおよび書き込みバッファーバイト[] buf = new byte [1024 * 10]; while((read = bufferstream.read(buf、0、1024 * 10))!= -1){zipstream.write(buf、0、read); }}} catch(例外e){e.printstacktrace(); }最後に{//ストリームを閉じるtry {if(null!= bufferstream)bufferstream.close(); if(null!= zipstream)zipstream.close(); if(null!= zipsource)zipsource.close(); } catch(ioexception e){e.printstacktrace(); }} /***ストリームファイルをフロントエンドブラウザーServleTOUTPUTSTREAM OS = Response.GetOutputStream(); Response.setContentType( "Application/X-OCTET-STREAM"); Response.setContentLength((int)zipfile.length()); Response.Addheader( "Content-Disposition"、 "Attachment; filename =" + urlencoder.encode(filezip、 "utf-8")); bufferedinputStream bis = null; BufferedOutputStream bos = null; try {bis = new BufferedInputStream(new FileInputStream(filepath)); bos = new BufferedOutputStream(OS); byte [] buff = new byte [2048]; int bytesRead; while(-1!=(bytesRead = bis.read(buff、0、buff.length))){bos.write(buff、0、bytesread); } os.flush(); os.close(); } catch(ioexception e){shop e; }最後に{if(bis!= null)bis.close(); if(bos!= null)bos.close();ファイルobj = new file(filepath); if(obj.exists()){obj.delete(); //サーバーによってローカルに生成された一時的な圧縮ファイルを削除}*// //ブラウザプロキシを判断し、ブラウザにそれぞれstring finalfileName = nullに応答するエンコード形式を設定します。 if(stringutils.contains(useragent、 "msie")|| stringutils.contains(useragent、 "trident")){// ie browser finalfilename = urlencoder.encode(filezip、 "utf-8"); System.out.println( "IE Browser"); } else if(stringutils.contains(useragent、 "mozilla")){// google、firefox browser finalfilename = urlencoder.encode(filezip、 "utf-8"); } else {finalfileName = urlencoder.encode(filezip、 "utf-8"); // other browsers} respons.setContentType( "Application/X-OCTET-STREAM");ブラウザはデフォルトでresponse.setheader( "content-disposition"、 "attachment; filename =" +finalFileName); DataOutputStream Temps = new DataOutputStream(ServletOutputStream); datainputStream in = new DatainputStream(new FileInputStream(filePath)); file ReportZip = new File(filepath); //一時的な圧縮ファイルを削除するために使用されます{while((in.read(b))!= -1){temps.write(b); } temps.flush(); } catch(Exception e){e.printstacktrace(); optlogsvc.savelog(au.getusername()、au.getattribute( "f_brno")、au.getattribute( "f_lstip")、toptlogservice.type_mr、 "、"、au.getusername()+"batch batch download picture"+filezip+"); }最後に{if(temps!= null)temps.close(); if(in!= null)in.close(); if(reportzip!= null)reportzip.delete(); // servletoutputStream.close(); } /***if(picinfollist.size()> 0){rc.put( "success"、true); rc.put( "picinfo"、picinfollist); optlogsvc.savelog(au.getusername()、au.getattribute( "f_brno")、au.getattribute( "f_lstip")、toptlogservice.type_mr、 "、"、au.getusername()+"+" query batch ") } else {rc.put( "success"、false); rc.put( "errmsg"、 "test info"); optlogsvc.savelog(au.getusername()、au.getattribute( "f_brno")、au.getattribute( "f_lstip")、toptlogservice.type_mr、 ""、au.getusername()+"Query batch") }*/ optlogsvc.savelog(au.getusername()、au.getattribute( "f_brno")、au.getattribute( "f_lstip")、toptlogservice.type_mr、 ""、 "、au.getusname()+"バッチダウンロード "戻る ; }JSONアレイ変換形式には問題があります。フロントエンドJSONから送信されたJSONがJSON.Stringifyによってフォーマットされている場合、バックグラウンドに行くときはこの方法で解析する必要があります。
私のレイアウトスキルは良くないので、見てみましょう。ブラウザはオンラインでコピーされたと判断しましたが、役に立たず、中国語を認識できないことがわかりました。最終的に、私は妥協し、まだ英語をファイル名として使用しました。中国語の文字化けコードに遭遇した場合は、Baiduで再度検索できます。他の人は同様の記事を書いていますが、私はそれらを研究するエネルギーを持っていません。
これは、サーバーに存在するファイルを圧縮する方法です。また、ネットワークの写真を入手し、それらを圧縮してダウンロードするために、以前にBaidu関連の記事を見ましたが、これは興味深いことです。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。