`

dsoframe.ocx实现远程下载编辑后利用反射回传保存

 
阅读更多

1、加载页面index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
 String path = request.getContextPath();
 String basePath = request.getScheme() + "://"
   + request.getServerName() + ":" + request.getServerPort()
   + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">
  <title>My JSP 'index.jsp' starting page</title>

  <script type="text/javascript">
 function hide()
 {
  document.all.Mydso.Toolbars = true;
  document.all.Mydso.Menubar = true;
  document.all.Mydso.Titlebar = true;
document.all.Mydso.SetMenuDisplay(1);
<%--//只有“打开”菜单可用 --%>
document.all.Mydso.SetMenuDisplay(2);
<%--//只有“打开”和“新建”菜单可用 --%>
document.all.Mydso.SetMenuDisplay(3);
 }

 word = function() {
  var localDir="c:\\temp\\"; // ���ر������ʱĿ¼
  var docName;// ���ر�����ļ���, ҲΪ�ϴ�����������ʱ���ļ���
  var docUrl; // Զ���ļ� e.g. http://128.96.172.238:9080/aaa/upload/aaa.doc
  var uploadUrl; //�ϴ�����������url
  var savedPath;
  var fso;
  {
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (!fso.FolderExists(localDir)) {
    fso.CreateFolder(localDir);
   }
  }
  this.openDoc = function(docName, docUrl) {
   this.docName = docName;
   this.docUrl = docUrl;
   
   if (typeof(docUrl) == 'undefined' || docUrl == '' || docUrl == null) {
    document.getElementById('Mydso').CreateNew("Word.Document");
   }else{
    document.getElementById('Mydso').Open(docUrl,false);
    setfile(localDir+docName);
   }
   document.getElementById('Mydso').Save(localDir+docName, true);
  }
  
  this.setUploadUrl = function(uploadUrl){
   this.uploadUrl = uploadUrl;
  }
  
  this.saveDoc = function(){
<%--   alert(localDir+this.docName);--%>
   document.getElementById('Mydso').Save(localDir+this.docName, true);
   document.getElementById('upload').src = localDir+this.docName;  

   
   //打开制定的本地文件
<%--   document.all.Mydso.Open(localDir+this.docName);--%>
   //制定用Word来打开c:\plain.txt文件
<%--   document.all.Mydso.Open(localDir+this.docName,false, "Word.Document");--%>
   
   document.getElementById('Mydso').HttpInit();
   document.getElementById('Mydso').HttpAddPostCurrFile("FileData", this.docName);
   document.getElementById('Mydso').HttpPost(this.uploadUrl);
<%--   alert(0);--%>
  }

  this.getTempFile = function()
  {
   return localDir+this.docName;
  }
  
  this.close = function(){
   document.getElementById('Mydso').close();
   try{
    fso.DeleteFile(localDir + this.docName);
   }catch(err){}
  }
 }

 var word = new word();
    word.setUploadUrl("http://127.0.0.1:8080/word/upload.jsp");
    
 function openfile()
 {
  var path = document.getElementById('upload').value;
  document.all.Mydso.Open("http://localhost:8080/word/upload/1.doc",true);
 }
 function upload()
 {
   word.saveDoc();
  
   var path = document.getElementById('upload').value;
   document.all.Mydso.Save(path,true);
  return true;
 }

  function load(){
         //方法:openDoc(docName, docUrl)
         // docName:必填,本地保存的文件名, 也为上传到服务器上时的文件名
         // docUrl: 填时,为从服务器端获取doc文档的路径, 不填时,表示本地新建doc文档
         //word.openDoc('zhwm.doc');
         word.openDoc('1.doc','http://127.0.0.1:8080/word/1.doc');
     }
    
     function save(){
         word.saveDoc();
         word.close();
     }

  var WshShell=new ActiveXObject("WScript.Shell");
  
  function setfile(path){
<%--   alert('yy='+path);--%>
   setTimeout('document.all.upload.focus();WshShell.sendKeys("tgtrg");',20);
  }
</script>
 </head>

 <body onload="load()">
  <OBJECT classid="clsid:00460182-9E5E-11d5-B7C8-B8269041DD57"
   codeBase="dsoframer.ocx" #Version="2,3,0,0" id="Mydso" name="Mydso"
   width='1100' height='800' align=center hspace=0 vspace=0>
  </OBJECT>
    <form action="upload.action" method="post" enctype="multipart/form-data"
      onsubmit="return upload()">
      <input type="file" src=""  name="upload" id="upload" value="选择文件">
      <input type="button" value="打开文件" onclick="load();">
      <input type="button" value="保存文件" onclick="save();">
      <input type="submit" value="提交">
     </form>
<%--  <table width="100%">--%>
<%--   <tr>--%>
<%--    <td  height="80%">--%>
<%--     <OBJECT classid="clsid:00460182-9E5E-11d5-B7C8-B8269041DD57"--%>
<%--      codeBase="dsoframer.ocx" #Version="2,3,0,0" id="Mydso"--%>
<%--      name="Mydso" width='100%' height='1000%' align=center hspace=0--%>
<%--      vspace=0>--%>
<%--     </OBJECT>--%>
<%--    </td>--%>
<%--   </tr>--%>
<%--   <tr>--%>
<%--    <td   height="80%">--%>
<%--     <form action="upload" method="post" enctype="multipart/form-data"--%>
<%--      onsubmit="return save()">--%>
<%--      <input type="file" name="upload" id="upload" value="选择文件">--%>
<%--      <input type="button" value="打开文件" onclick="openfile();">--%>
<%--      <input type="submit" value="提交">--%>
<%--     </form>--%>
<%--    </td>--%>
<%--   </tr>--%>
<%--  </table>--%>
 </body>
</html>

2、处理页面uoload.jsp

<%@page
 import="com.jspsmart.upload.SmartUpload,org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest"%>
<%@ page language="java"
 import="java.util.*,java.io.*,java.lang.reflect.*,org.apache.commons.fileupload.*,org.apache.commons.fileupload.disk.*"
 pageEncoding="UTF-8"%>

<html>
 <body>
  <%
   Class<?> multi = request.getClass();
   Field personNameField = multi.getDeclaredField("multi");
   personNameField.setAccessible(true);
   JakartaMultiPartRequest partRequest = (JakartaMultiPartRequest) personNameField
     .get(request);

   Class<?> fileClass = partRequest.getClass();
   Field uploadFiles = fileClass.getDeclaredField("files");
   uploadFiles.setAccessible(true);
   Map fileMap = (Map) uploadFiles.get(partRequest);

   System.out.println(fileMap);
   if (null != fileMap && !fileMap.isEmpty()) {
    List<DiskFileItem> fileItem = (List<DiskFileItem>)fileMap.get("FileData");

    for (DiskFileItem diskFile : fileItem) {
     DiskFileItem disk =  diskFile;
     File temp = new File("d:\\tewt.doc");
     disk.write(temp);
    }
   }
  %>
 </body>
</html>
3、本地处理action

/**
 *
 */
package com.test.controller;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class UploadAction extends ActionSupport {
 private File upload;
 private String uploadContentType;
 private String uploadFileName;

 public File getUpload() {
  return upload;
 }

 public void setUpload(File upload) {
  this.upload = upload;
 }

 public String getUploadContentType() {
  return uploadContentType;
 }

 public void setUploadContentType(String uploadContentType) {
  this.uploadContentType = uploadContentType;
 }

 public String getUploadFileName() {
  return uploadFileName;
 }

 public void setUploadFileName(String uploadFileName) {
  this.uploadFileName = uploadFileName;
 }

 public HttpServletResponse getResponse() {
  HttpServletResponse response = null;
  try {
   response = ServletActionContext.getResponse();
  } catch (RuntimeException e) {
  }
  return response;
 }

 public HttpServletRequest getRequest() {
  HttpServletRequest request = null;
  try {
   request = ServletActionContext.getRequest();
  } catch (RuntimeException e) {
  }
  return request;
 }

 @Override
 public String execute() throws Exception {

  Map<String, Object> map = ActionContext.getContext().getParameters();

  boolean isMultipart = ServletFileUpload
    .isMultipartContent(getRequest());
  if (isMultipart) {// type=multipart/form-data
   DiskFileItemFactory factory = new DiskFileItemFactory();
   ServletFileUpload upload = new ServletFileUpload(factory);
   upload.setFileSizeMax(1024 * 1024);// 设置上传文件的最大容量
   List<FileItem> items = upload.parseRequest(getRequest());// 取得表单全部数据

   for (FileItem item : items) {
    if (item.isFormField()) {// 如果不是文件类型
     // String name = item.getFieldName(); 表单中某个控件的名称
     // String value = item.getString(); 表单中某个控件的值
    } else {
     String filename = item.getName();
     File f = new File(filename); // 保存的文件
     item.write(f);// 保存文件
    }
   }
  } else {

  }
  HttpServletRequest request = getRequest();
  FileOutputStream fos = new FileOutputStream("d:\\"
    + getUploadFileName());
  FileInputStream fis = new FileInputStream(getUpload());
  byte[] buffer = new byte[1024];
  int len = 0;
  while ((len = fis.read(buffer)) > 0) {
   fos.write(buffer, 0, len);
  }
  fos.close();
  fis.close();
  return SUCCESS;
 }
}

  4、web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 <display-name>online office</display-name>

 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>

 <filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

</web-app>

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
 <constant name="struts.devMode" value="false" />
 <constant name="struts.custom.i18n.resources" value="messages" />

 <package name="showcase" extends="struts-default,json-default"
  namespace="/">

  <action name="upload" class="com.test.controller.UploadAction">
   <result name="input">index.jsp</result>
   <result name="success">success.jsp</result>
  </action>
 </package>
</struts>

 

分享到:
评论

相关推荐

    DsoFrame.ocx控件

    【DsoFrame.ocx控件】是一个用于Windows应用程序开发的组件,主要由C++语言编写,以OCX(OLE Control Extension)格式封装。OCX是Microsoft ActiveX技术的一部分,允许开发者在应用程序中嵌入和使用各种功能丰富的...

    Delphi调用Dsoframe.ocx来嵌入启动word

    在Delphi编程环境下,利用DSOFrame.ocx控件可以实现这样的需求。本篇文章将深入探讨如何在Delphi项目中通过DSOFrame控件来嵌入并启动Word。 首先,DSOFrame是一个ActiveX控件,它允许开发者在Windows应用程序中嵌入...

    dsoframer.ocx最新版本

    在描述中提到的新版DSOFramer.ocx,通过`http://server/dir/`的格式可以实现将内容保存到服务器上。这表明该控件可能支持HTTP协议,允许用户在运行应用程序时动态加载或保存数据到指定的网络位置。这种功能增强了...

    Mscomct2.ocx MSCOMCTL.OCX threed32.ocx 控件

    1.下载或者复制提示里缺失的文件(MSCOMCT2.OCX),注意32位系统和64位系统分别放到系统盘C/Windows/system32和SysWOW64文件夹内。 2.打开搜索“cmd”,右键管理员身份打开命令提示符,32位的系统输入“regsvr32 %...

    Comctl32.ocx、MSCOMCTL.OCX等常用控件打包下载

    2. **COMDLG32.OCX**:此控件提供了标准对话框,如打开和保存文件对话框,以及打印设置对话框。它是Windows系统的一部分,用于简化应用程序与用户进行常见对话交互的实现。 3. **MSCOMCTL.OCX**:Microsoft Common ...

    dsoframer.ocx控件

    4. **API 文档丰富**: 开发人员可以利用详尽的 API 文档来调用和控制控件,实现各种定制功能,如预设编辑模式、权限控制等。 5. **开源优势**: 开源特性使得开发者可以深入了解控件的工作原理,进行深度定制,同时也...

    win7/vista下注册Big2GB.ocx的方法以及下载

    有些老游戏或者老程序在win7运行出错并提示big2gb.ocx错误. 这里提供解决方法. 1.安装msvbvm50.exe 2.复制Big2GB.ocx到c:\windows\system32 3.注册Big2GB.ocx文件 注册方法:按Win+R,打开运行栏,输入"regsvr32 ...

    mscal.ocx微软日历控件

    Manually install the ocx file * Please read our disclaimer before installing. 1. Download the file MSCAL.OCX to your desktop. 2. Move the ocx file to the program directory missing the file. 3. If ...

    wmp.ocx音乐播放器控件

    7. **实例应用**: 开发者可能在电子商务、在线教育、娱乐软件等领域利用wmp.ocx控件,为用户提供音频和视频的播放功能。 8. **替代方案**: 随着技术发展,其他非ActiveX的媒体播放解决方案,如HTML5的video标签,已...

    QRMaker.ocx文件

    **QRMaker.ocx文件详解** QRMaker.ocx 是一个动态链接库(Dynamic Link Library,简称DLL)文件,主要用于创建和操作二维码(Quick Response Code,简称QR Code)。QR码是一种二维条形码,能够存储大量的信息,如...

    COMDLG32.OCX下载 ocx下载 COMDLG32.OCX免费下载

    COMDLG32.OCX下载 ocx下载 COMDLG32.OCX免费下载

    ct系列控件[ctCombo.ocx ctToolBar.ocx ctTree.ocx ctListBar.OCX]

    "ct系列控件"是Windows应用程序开发中常用的一组组件,主要包含`ctCombo.ocx`、`ctToolBar.ocx`、`ctTree.ocx`和`ctListBar.OCX`这四个OCX(ActiveX)控件。这些控件通常被用于增强应用程序的用户界面,提供更丰富的...

    ezVidCap.ocx_演示程序.rar.rar

    描述中的“ezVidCap.ocx_演示程序 ezVidCap.ocx下载”进一步确认了这个压缩包是ezVidCap.ocx控件的演示示例,同时提供了下载ezVidCap.ocx的信息。OCX(Object Linking and Embedding, Control eXtension)是...

    msinet.ocx最新版完整版,解决inet控件下载源码缺失

    msinet.ocx最新版 inet控件中使用需要调用msinet.ocx 1、inet控件中openurl读出网页源码不完整的问题。这是因为msinet.ocx版本没有更新到最新,最新版本为6.1.97.82,约130K,大部分机器版本都是6.0.81.69,约112K。...

    MSCOMCT2.ocx控件

    3. **编程接口**:然后可以利用控件提供的属性、方法和事件进行编程,例如设置默认日期、获取用户选择的日期等。 **安全性和兼容性** 虽然`MSCOMCT2.ocx`为开发带来了便利,但由于ActiveX技术的局限性,它可能存在...

    dsoframer.ocx控件最新版支持office2016

    **DSOFramer.ocx控件** 是一个专为软件开发者设计的组件,它主要用于在Windows Forms(WinForm)应用程序中嵌入Office文档,如Word、Excel等。此控件的最新版已经更新以支持Microsoft Office 2016,这意味着开发者...

    comctl32.ocx.zip

    2. **解压**:解压下载的 `comctl32.ocx.zip` 文件,获取所有组件。 3. **注册**:通过管理员权限运行命令提示符,然后使用 `regsvr32 comctl32.ocx` 命令尝试重新注册 `comctl32.ocx` 文件。 4. **依赖项**:如果...

    mscomct2.ocx控件包.

    **mscomct2.ocx控件包详解** `mscomct2.ocx` 是一个非常重要的ActiveX控件,主要用于Windows应用程序开发,特别是在基于Visual Basic 6 (VB6) 和其他支持ActiveX技术的开发环境中。它包含了日期选择器、日历控件和...

Global site tag (gtag.js) - Google Analytics