java - create a zip file. and download it -
i created button allows create zip file., function zips file works correctly, when call via button (in js file) crashes , gives blank page (i think not manage output stream) please idea
(this new modified version (for see same question)
here code :
button
isc.toolstripbutton.create({ id: "booksapp_getxmlimage_button" ,autodraw:false ,icon: getuiicon("icon_xml_16") ,prompt: getuimsg("book_report_get_xml",4) ,showhover:true ,hoverstyle:"book_hover_style" ,click : function () { booksapp_action_loadfile("objx"); // isc.say("test"); } });
function call zipfile() method:
function booksapp_action_loadfile(p_usedformat) { var tmpbookid = booksapp_application.fp_bookid; var tmpids = booksapp_application.fp_fct_getselectedpovids(); var tmpusr_id = fpiuser.fp_fct_getid(); var tmpformat = p_usedformat; var showinwindow=false; books_objects.exportdata( { r_book_idnum : tmpbookid ,sbook_id : tmpbookid ,spov_ids : tmpids ,suser_id : tmpusr_id ,sformat : tmpformat } ,{ operationid: "customexport" ,exportdisplay: (showinwindow ? "window" : "download") } ,function (dsresponse, data, dsrequest) { //never called booksapp_action_log("booksapp_action_loadfile:"+data); } ); }
customexport() function
public static string customexport(rpcmanager rpc, httpservletresponse response) throws exception { string sreturn = _return_ok; try { // setting docustomresponse() notifies rpcmanager we'll // bypass rpcmanager.send // , instead write directly servletresponse output stream rpc.docustomresponse(); requestcontext.setnocacheheaders(response); writeserverdebug("customexport : start"); dsrequest req = rpc.getdsrequest(); list<?> results = req.execute().getdatalist(); string sreqdata = (string) req.getparameter("exportdisplay"); string sreqdata_sbook_id = "" + req.getcriteriavalue("sbook_id"); string sreqdata_spov_ids = "" + req.getcriteriavalue("spov_ids"); string sreqdata_suser_id = "" + req.getcriteriavalue("suser_id"); string sreqdata_sformat = "" + req.getcriteriavalue("sformat"); stringbuilder content = new stringbuilder("get (sreqdata:" + sreqdata + ",sbook_id:" + sreqdata_sbook_id + ",spov_ids:" + sreqdata_spov_ids + ",suser_id:" + sreqdata_suser_id + ",sformat:" + sreqdata_sformat + ")" + results.size() + " line(s):"); (iterator<?> = results.iterator(); i.hasnext();) { map<?, ?> record = (map<?, ?>) i.next(); content.append("\n" + books.column_idnum + ":" + record.get(books.column_idnum)); content.append("\n" + books.column_name + ":" + record.get(books.column_name)); } writeserverdebug("the content \n" + content.tostring()); // create new office engine officeengine myofficeengine = new officeengine(); boolean bisconnected = myofficeengine.get_repositorybridge() .connectsourcedatabase(false); if (bisconnected) { //connected repository, files if (sreqdata_sformat.equalsignorecase("pdf") || sreqdata_sformat.equalsignorecase("pptx")) { //the book end user format string sreturnpptx = myofficeengine.performgeneratepptx( req.gethttpservletrequest(), response, sreqdata_sbook_id, sreqdata_spov_ids, sreqdata_suser_id, sreqdata_sformat); writeserverdebug("customexport call performgeneratepptx, return "+ sreturnpptx); } else if (sreqdata_sformat.equalsignorecase("objx")) { //string sreturnobjx = myofficeengine.performexport(req.gethttpservletrequest(), response,sreqdata_sbook_id,sreqdata_suser_id,sreqdata_sformat // ); string sreturnpptx = myofficeengine.performexport(req.gethttpservletrequest(), response,sreqdata_sbook_id,sreqdata_suser_id,sreqdata_sformat ); writeserverdebug("customexport call performgeneratepptx, return " + sreturnpptx); } //free connection repository myofficeengine.get_repositorybridge().freeconnectionsource(); } else { response.setcontenttype("text/plain"); response.addheader("content-disposition", "attachment; filename=book.txt"); servletoutputstream os = response.getoutputstream(); os.print(content.tostring()); os.flush(); } } catch (exception e) { writeserverdebug("error:" + e.getlocalizedmessage()); sreturn = repository._return_ko; } return sreturn; }
performexport method :
public string performexport(javax.servlet.http.httpservletrequest request,javax.servlet.http.httpservletresponse response, string p_sbook_id, string p_suser_id, string p_sformat) { //public string performexport(string p_sbook_id, string p_suser_id, string p_sformat) { string sreturn = _return_ok; writeserverdebug("performexport(req,resp,'" + p_sbook_id + "'," + p_suser_id + "," + p_sformat + "):start"); // ==================================================== // = template directory // ==================================================== filermanager myfiler = new filermanager(); string sinputpath = myfiler.getdirectory( filermanager.directorykind_users, true); // here add tmp directories write xml's structure , zip // sinputpath+="tmp"; // ==================================================== // = working variables jdbc objects. // ==================================================== connection con = null; statement stmt = null; resultset rs = null; string sql = ""; // string slogmsg = "loadsourcedatabaseparams():"; // preparedstatement prepstmttarget = null; try { writeserverdebug("performexport >> start"); // --------------------------------------------------------- // - establish connection. // --------------------------------------------------------- con = get_repositorybridge().getsourcedatabaseconnection(); } catch (exception ex) { sreturn = repository._return_ko; } hashmap<string, object> _hcachebook = new hashmap<string, object>(); try { int isrccount = get_repositorybridge().cachequerydata( "select top(1) * " + books.table + " " + books.column_idnum + "=" + p_sbook_id, _hcachebook, "database_source"); int icolcount = (integer) (_hcachebook.get("sql_columncount")); string scoldesc = (string) (_hcachebook.get("sql_columndesc")); string scolvalues = (string) (_hcachebook .get("sql_columnvalues")); writeserverdebug("performexport:icolcount=" + icolcount); writeserverdebug("performexport:scoldesc=" + scoldesc); writeserverdebug("performexport:scolvalues=" + scolvalues); (int ilinecounter = 1; ilinecounter <= isrccount; ilinecounter++) { (int icolcounter = 1; icolcounter <= icolcount; icolcounter++) { string stmpcolclass = (string) (_hcachebook .get("sql_columndescclass(" + icolcounter + ")"));// return if (stmpcolclass.equals("java.lang.string")) { system.out.println(_hcachebook.get(ilinecounter+"_"+icolcounter)); } else if (stmpcolclass.equals("java.lang.integer")) { system.out.println(_hcachebook.get(ilinecounter+"_"+icolcounter)); } else if (stmpcolclass.equals("java.lang.double")) { system.out.println(_hcachebook.get(ilinecounter+"_"+icolcounter)); } } } int nbrcol = (integer) (_hcachebook.get("sql_columncount")); system.out.println("test nbr col : "+ nbrcol); zipoutputstream objx = this.creatxml(nbrcol, 1, _hcachebook); response.setheader("content-disposition", "attachment;filename=\testjs.zip\""); string scontenttype = "application/vnd.ms-objx"; response.setcontenttype(scontenttype); servletoutputstream outstream = response.getoutputstream(); outstream.close(); } catch (exception ex) { system.out.println("i in exception :"); ex.printstacktrace(); } return sreturn; }
i solved problem , here right code
performexport method :
public string performexport(javax.servlet.http.httpservletrequest request,javax.servlet.http.httpservletresponse response, string p_sbook_id, string p_suser_id, string p_sformat) { string sreturn = _return_ok; try { writeserverdebug("performexport(req,resp,'" + p_sbook_id + "'," + p_suser_id + "," + p_sformat + "):start"); // ==================================================== // = template directory // ==================================================== filermanager myfiler = new filermanager(); string sinputpath = myfiler.getdirectory( filermanager.directorykind_users, true); // ==================================================== // = working variables jdbc objects. // ==================================================== connection con = null; statement stmt = null; resultset rs = null; string sql = ""; try { writeserverdebug("performexport >> start"); // --------------------------------------------------------- // - establish connection. // --------------------------------------------------------- con = _repositorybridge.getsourcedatabaseconnection(); } catch (exception ex) { sreturn = repository._return_ko; } hashmap<string, object> _hcachebook = new hashmap<string, object>(); try { int isrccount = get_repositorybridge().cachequerydata("select top(1) * " + books.table + " " + books.column_idnum + "=" + p_sbook_id, _hcachebook, "database_source"); int icolcount = (integer) (_hcachebook.get("sql_columncount")); string scoldesc = (string) (_hcachebook.get("sql_columndesc")); string scolvalues = (string) (_hcachebook .get("sql_columnvalues")); int nbrcol = (integer) (_hcachebook.get("sql_columncount")); string scontenttype = "application/vnd.ms-objx"; response.setcontenttype(scontenttype); servletoutputstream outstream = new servletoutputstream() { @override public void write(int arg0) throws ioexception { // todo auto-generated method stub } }; outstream = response.getoutputstream(); this.creatxml(nbrcol, 1, _hcachebook, outstream, response ); outstream.flush(); outstream.close(); } catch (exception ex) { system.out.println("i in exception :"); ex.printstacktrace(); } } catch (exception e) { writeserverdebug("error:" + e.getlocalizedmessage()); sreturn = repository._return_ko; } return sreturn; }
creatxml method:
public zipoutputstream creatxml(int nbr_col, int ilinecounter, hashmap<string, object> h, servletoutputstream out , javax.servlet.http.httpservletresponse response ) throws ioexception { zipoutputstream zipfile = null; string bookname = null; string bookid = null; int axisid = 11 ; string templatechild = null; documentbuilderfactory docfactory = documentbuilderfactory.newinstance(); documentbuilder docbuilder = null; try { writeserverdebug("call function create xml"); docbuilder = docfactory.newdocumentbuilder(); } catch (parserconfigurationexception e2) { e2.printstacktrace(); } // element : book_objects string tablename = "book_objects"; org.w3c.dom.document doc = docbuilder.newdocument(); element p_tablename = doc.createelement(tablename); doc.appendchild(p_tablename); // element : object element p_object = doc.createelement("object"); string []platformeversion = javafunctions.convertstringtoarray(repository.portal_version, "="); p_object.setattribute("version", platformeversion[1]+" "+getversion()); p_tablename.appendchild(p_object); string tabcol = (string) (h.get("sql_columndesc")); string[] colname = javafunctions.convertstringtoarray(tabcol, ", "); string [][]dep = null; dep = dependances.sreturndependance(); string [][]colval = new string [9][2]; int c=0; (int = 1; <= nbr_col; i++) { string columnname = colname[i - 1]; columnname = columnname.replaceall(" ", ""); columnname = columnname.replace("(", ""); columnname = columnname.replace(")", ""); element nomchamps = doc.createelement(columnname); string value = ""; value = "" + h.get(ilinecounter + "_" + i); if(columnname.equalsignorecase(books.column_name)){ bookname = value; } if(columnname.equalsignorecase(books.column_idnum)){ bookid = value; } if(columnname.equalsignorecase(books.column_axis_main_idnum)){ axisid = (integer) h.get(ilinecounter + "_" + i); } if(columnname.equalsignorecase(books.column_template_child)){ templatechild = (string) h.get(ilinecounter + "_" + i); } //retrieve columns , values dependencies for(int cpt=0; cpt<5; cpt++){ if(dep[cpt][0].equalsignorecase(columnname)){ colval[c][0]=columnname; colval[c][1]= value; c++; } } nomchamps.appendchild(doc.createtextnode((string) value)); p_object.appendchild(nomchamps); } string label[] = javafunctions.convertstringtoarray(templatechild, "/"); string path = "c:\\fovea_repository/output/"; file outputdirectory = new file (path); // create output file string filename ="exportdirectory"+ bookname +".zip"; response.setheader( "content-disposition", "filename=" + filename ); transformer tf = null; try { tf = transformerfactory.newinstance().newtransformer(); } catch (transformerconfigurationexception e1) { e1.printstacktrace(); } try { // format xml tf.setoutputproperty(outputkeys.indent, "yes"); tf.setoutputproperty(outputkeys.method, "xml"); tf.setoutputproperty(outputkeys.encoding, "utf-8"); tf.setoutputproperty("{http://xml.apache.org/xslt}indent-amount","4"); file directory = new file ("c:/fovea_repository/exportdirectory/"); if(!directory.exists()){ directory.delete(); directory.mkdir(); } domsource source = new domsource(doc); streamresult res = new streamresult(new file("c:/fovea_repository/exportdirectory/dependance.xml")); tf.transform(source, res); //create zip file (export_directory) appzip appzip = new appzip(); string sourcefolder = "c:/fovea_repository/exportdirectory"; string outputfoler = " "; zipoutputstream returnfile = appzip.zipfile(outputfoler , sourcefolder , out, bookname , bookid); zipfile = returnfile; } catch (transformerexception e) { e.printstacktrace(); } return zipfile; }
Comments
Post a Comment