1. jsp有办法实现word/excel的在线预览吗
1.jsp页面 <s:form action="fileAction" namespace="/file" method="POST" enctype="multipart/form-data"> <!– name为后台对应的参数名称 –> <s:file name="files" label="file1"></s:file> <s:file name="files" label="file2"></s:file> <s:file name="files" label="file3"></s:file> <s:submit value="提交" id="submitBut"></s:submit> </s:form>2.Action //单个文件上传可以用 File files,String filesFileName,String filesContentType //名称要与jsp中的name相同(三个变量都要生成get,set) private File[] files; // 要以File[]变量名开头 private String[] filesFileName; // 要以File[]变量名开头 private String[] filesContentType; private ServletContext servletContext; //Action调用的上传文件方法 public String execute() { ServletContext servletContext = ServletActionContext.getServletContext(); String dataDir = servletContext.getRealPath("/file/upload"); System.out.println(dataDir); for (int i = 0; i < files.length; i++) { File saveFile = new File(dataDir, filesFileName[i]); files[i].renameTo(saveFile); } return "success"; }3.配置上传文件临时文件夹(在struts.xml中配置) <constant name="struts.multipart.saveDir" value="c:/temp"/>文件下载1.下载的url(到Action) <a href="${pageContext.request.contextPath}/file/fileAction!down.action">下载</a>2.struts.xml配置 <package name="file" namespace="/file" extends="struts-default"> <action name="fileAction" class="com.struts2.file.FileAction"> <!– 下载文件配置 –> <!–type 为 stream 应用 StreamResult 处理–> <result name="down" type="stream"> <!– 不管实际类型,待下载文件 ContentType 统一指定为 application/octet-stream 默认为 text/plain –> <param name="contentType">application/octet-stream</param> <!– 默认就是 inputStream,它将会指示 StreamResult 通过 inputName 属性值的 getter 方法, 比如这里就是 getInputStream() 来获取下载文件的内容,意味着你的 Action 要有这个方法 –> <param name="inputName">inputStream</param> <!– 默认为 inline(在线打开),设置为 attachment 将会告诉浏览器下载该文件,filename 指定下载文 件保有存时的文件名,若未指定将会是以浏览的页面名作为文件名,如以 download.action 作为文件名, 这里使用的是动态文件名,${fileName}, 它将通过 Action 的 getFileName() 获得文件名 –> <param name="contentDisposition">attachment;filename="${fileName}"</param> <!– 输出时缓冲区的大小 –> <param name="bufferSize">4096</param> </result> </action> </package>3.Action //Action调用的下载文件方法 public String down() { return "down"; } //获得下载文件的内容,可以直接读入一个物理文件或从数据库中获取内容 public InputStream getInputStream() throws Exception { String dir = servletContext.getRealPath("/file/upload"); File file = new File(dir, "icon.png"); if (file.exists()) { //下载文件 return new FileInputStream(file); //和 Servlet 中不一样,这里我们不需对输出的中文转码为 ISO8859-1 //将内容(Struts2 文件下载测试)直接写入文件,下载的文件名必须是文本(txt)类型 //return new ByteArrayInputStream("Struts2 文件下载测试".getBytes()); } return null; } // 对于配置中的 ${fileName}, 获得下载保存时的文件名 public String getFileName() { String fileName ="图标.png"; try { // 中文文件名也是需要转码为 ISO8859-1,否则乱码 return new String(fileName.getBytes(), "ISO8859-1"); } catch (UnsupportedEncodingException e) { return "icon.png"; } }
2. struts2中文件上传问题
你要学会用debug模式来调试自己的代码。把断点设置在 String root = ServletActionContext.getRequest().getRealPath("/upload"); 可以一步步查看每个变量和属性的值专 ,这属样更容易找到问题。这里你需要查看root 和 destfile的值 这样很容易看出你得到的路径是否为你想要设置的路劲。也可以用system.out.println(root) 打印到控制台看一下。
3. struts2如何同时上传文件以及获得表单数据
事实上这根本抄不需要什么其他配置操作,因为这是Struts2,而不是原生Servlet,在Struts2中,拦截器会将request中的表单数据(或者文件格式的数据)都和action类中的属性名称一一对应的注入值(包括文件数据)。所以你需要做的,其实只是在jsp页面(或html)中加入一个file类型的input标签,名称记住(比如为photo),然后在action类中加一个File类型(java.io.File)字段,此字段必须和刚刚的input标签name属性一致,即photo(private File photo;)。最后,需要注意的是,当你妄图从网页上传一个文件类型的表单时,必须将包围它的form类将enctype="multipart/form-data" method="post"加上,即method必须为post,且enctype,也就是表单数据类型,必须为二进制的。
4. struts2上传文件,所有例子中用的都是上传image的例子,为什么不用上传word的例子为什么上传word不行
没说不行啊,默认struts2是可以上传任何类型的。如果需要限制类型,就在struts2.xml中加入如下的配置(重写或覆盖fileUpload拦截器的默认设置):
<interceptor-refname="fileUpload"><paramname="allowedTypes">image/png,image/gif,image/jpeg</param></interceptor-ref>
这个allowedTypes里面用逗号分隔的就是:允许的各种文件类型(注意是允许的),用的是MIME命名的类型。
我查了一下,word的.doc文件(word 97~2007)的MIME类型是application/msword,
word 2007之后的.docx 文件的MIME类型是
application/vnd.openxmlformats-officedocument.wordprocessingml.document
如果你项目中不行,看看提示是什么,是不是配置中使用了类似上面的设置。
5. 怎样将用struts2 jsp 将word文档展现在网页上,而且不需要选在是否保存 下载
一、把jsp页面数据复制到word文档 var table=document.getElementByIdx_x('printTable'); row=table.rows.length; column=table.rows(1).cells.length; var word = new ActiveXObject("Word.Application"); word.Application.Visible = true; word.Selection.Text ="<%=reportTitle%>"; var mydoc=word.Documents.Add('',0,0); myRange =mydoc.Range(0,1); var sel=document.body.createTextRange(); sel.moveToElementText(table); sel.select(); sel.execCommand('Copy'); myRange.Paste();二、把jsp页面数据写入word文档var table=document.getElementByIdx_x('printTable');row=table.rows.length;column=table.rows(1).cells.length;var wdapp=new ActiveXObject("Word.Application");wdapp.visible=true;wddoc=wdapp.Documents.Add(); //添加新的文档thearray=new Array();//将页面中表格的内容存放在数组中for(i=0;i<row;i ){thearray[i]=new Array();for(j=0;j<column;j ){ thearray[i][j]=table.rows(i).cells(j).innerHTML;}}var range = wddoc.Range(0,0);range.Text="<%=reportTitle%>" " ";wdapp.Application.Activedocument.Paragraphs.Add(range);wdapp.Application.Activedocument.Paragraphs.Add();rngcurrent=wdapp.Application.Activedocument.Paragraphs(3).Range;var objTable=wddoc.Tables.Add(rngcurrent,row,column) //插入表格for(i=0;i<row;i ){for(j=0;j<column;j ){objTable.Cell(i 1,j 1).Range.Text = thearray[i][j].replace("","");}}三jsp生成word,excle,pdf在web-oa系统中,公文管理好象不可或缺,有时需要从数据库中查询一些数据以某种格式输出来,并以word文档的形式展现,有时许多word文档保存到数据库中的某个表的Blob字段里,服务器再把保存在Blob字段中的图片文件展现给用户。通过网上查找发现很少有关于此类的文章,现在整理起来供大家参考。1 在client端直接生成word文档在jsp页面上生成word文档非常简单,只需把contentType=”text/html”改为contentType="application/msword; charset=gb2312"即可,代码如下:通过设置可以使原来页面的内容在word中表现出来。如果需要把word文档下载下来,只需在jsp页面上面加上如下代码:其中filename.doc中filename是要下载的word文档的文件名,可以通过来自行定制,如下.doc");%>这样提供一个提示信息供用户选择如下图所示小技巧:如果程序员需要在生成word文档的时候按照自己预先在word上设计好的格式,可以复制word格式然后粘贴到frontpage中,取html代码贴到jsp页面即可。2 在客户端输出存在数据库中的word实体这里只讨论在client输出oracle中BLOB字段中的word文档实体。其中调用了类getBlobBean,该类提供了从oracle中取出blob功能,代码如下:package yourpackage;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import oracle.sql.*;import beans.yourbeanpackage. getBlobBean;public class GetBlobServlet1 extends HttpServlet {//设置输出内容类型,这个设置很重要,否则客户端浏览器不能识别输出内容,导致弹出下载的对话框。 private static final String CONTENT_TYPE = "application/msword;charset=gb2312"; //Initialize global variables public void init() throws ServletException { } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); perform(request,response); } public void perform(HttpServletRequest request, HttpServletResponse response){try{//该类功能是从oracle哭中取出blob实体 getBlobBean getBlob=new getBlobBean(); OutputStream sos = response.getOutputStream(); getBlob.connFunction();oracle.sql.BLOB blob=getBlob.getBlob("cehui");//输出word文档if(blob!=null){ InputStream pi = blob.getBinaryStream(); int blobsize =(int)blob.length(); byte[] blobbytes = new byte[blobsize]; int bytesRead = 0; while ((bytesRead = pi.read(blobbytes)) != -1) { sos.write(blobbytes, 0, bytesRead); } pi.close(); sos.flush(); sos.close(); } getBlob.dropConnFunction(); }catch(Exception e){ System.out.println(e.toString()); } } //Clean up resources public void destroy() { }} 3 在client端直接生成EXCEL文档生成例子excel 。 用WORD排版面,倒出HTML 把代码拷贝到网页里,然后这个JSP页面打印你就随心所欲的控制了。 4 在client端直接生成PDF文档需要下载JAR包:以下代码在JDK1.4 RESIN2.16 下测试通过ITEXT包 http://mesh.dl.sourceforge.net/sourceforge/itext/itext-1.3.5.jar字体包http://itext.sourceforge.net/downloads/iTextAsian.jarJSP生成到客户IE端直接打开 ie_PDF.jsp ------------------------------- 在服务器端生成不下载。 server_PDF.jsp 使用iText可以设置文字的字体,对于我们中国的程序员来说如何显示中文是最紧要的问题。幸好iText中有一个专门的包用来设置亚洲国家的字体你可以从http://itext.sourceforge.net/downloads/iTextAsian.jar下载这个包。然后把它直接放到你的ClassPath中就可以了。如何设置字体呢?BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);在上面的代码中设置了中文字体的显示,你只要使用下面的代码就可以包中文加到PDF中了String title = "我爱喝咖啡";Paragraph t = new Paragraph(title, FontChinese); doc.add(t);
6. struts2如何实现word文档的在线预览功能
刚开始工作,交给了一个文件管理的功能,大体上是上传,下载,在线预览文件。其中的上传下载都可以了,但是这个在线预览确实很头疼,不会做。经理说的那个意思好像是:不用直接下载,当你点击查看的时候,会弹出一个word文档,当然这个word文档时不会被存放到本地上的。
7. 如何在struts2中结合HttpClient进行文件上传
拦截器增加file拦截器页面写个<input type="file" name="upload"/>后台action里定义一个upload成员变量,并鞋号getter和setter方法文件直接就映射到action的upload属性里了,主要是要配置上file拦截器,basicStack是没有file拦截器的,defaultStack里包括了file拦截器
8. struts2文件上传
引入commons-fileupload 的jar包,页面标签是file类型。后台直接按前台标签的名字按流读取就行了。跟普通的上传下载没区别。
9. struts2 如何通过ajax上传文件
ajax是不能上传文件的,一般做法是使用一个隐藏的iframe 来个传,达到无刷新上传的效果。还有就是使用swf上传控件,swfUpload等