1

我需要支持使用 Applet 上传文件夹。我已经实现了将尝试获取用户主目录并尝试为该文件夹创建一个临时 zip 文件的小程序,然后它将点击我的上传 servlet。实际上,zip 文件的创建和上传将通过从 JavaScript 调用小程序方法 uploadFolder 之一来启动。当我在用户主目录中创建一个 zip 文件时,我得到一个 java.security.AccessControlException: access denied (java.io.FilePermission C:\Documents and Settings\userhomedir\temp_timestamp.zip write)。

以下是我已经完成的步骤:

第1步:

  1. 创建了一个小程序来创建 zip 和文件,以及上传 servlet 以及 uploadFolder 方法。
  2. 为该小程序项目创建了一个签名的 jar。
  3. html代码是

    <Applet code="com.project.upload.FolderUploadApplet.class" name="uploadApp"
        archive="upload.jar"
        width="250" height="80" >
    </applet>
    
  4. JavaScript 代码是

    window.alert(uploadApp.uploadFolder(destionationPath));
    

第2步:

在此之后,我浏览了一些论坛并决定使用 JNLP 选择 JWS。在第 1 步中,我能够使用 JavaScript 调用小程序方法,但是当我使用 JNLP 时,我无法通过 JavaScript 调用我的小程序方法。请找到以下代码片段:

html

<Applet code="com.altair.cm.upload.FolderUploadApplet.class" id="xyz" archive="scmfu.jar">
    <param name="jnlp_href" value="folderupload.jnlp">  
</applet>

JavaScript

   var app = document.getElementById("xyz");
   window.alert(app.uploadFolder(destionationPath));

文件夹上传.jnlp

    <?xml version="1.0" encoding="UTF-8"?>
        <jnlp spec="1.0+" codebase="" href="">
        <information>
            <title>Folder Upload</title>
            <vendor>Team</vendor>
        </information>
        <security>
          <all-permissions/>
        </security>
        <resources>
            <!-- Application Resources -->
            <j2se version="1.6+"
                  href="http://java.sun.com/products/autodl/j2se"
                  <!-- secure java vm argument -->
                  java-vm-args="-Xmx1024M"/>
            <jar href="scmfu.jar"
                main="true" />
                <!-- secure properties -->
            <property name="sun.java2d.noddraw"
                value="true"/>
            <property name="jnlp.myProperty"
                value="a user-defined property"/>
        </resources>
        <applet-desc 
             name="uploadApp"
             main-class="com.altair.cm.upload.FolderUploadApplet.class"
             width="600"
             height="200">             
         </applet-desc>
         <update check="background"/>
        </jnlp>
    Applet Code :
    public class FolderUploadApplet extends JApplet {

    public String uploadFolder(String destinationPath){
         String fileName = UploadUtil.getInstance().processZipAndUpload(destinationPath,file.getPath());
         return fileName;
    }
}

任何人都可以建议我,更好地访问本地文件系统并纠正我是否做错了什么?

4

1 回答 1

2

如果一个受信任的小程序被 JS 调用,它通常会变成沙盒。要解决这个问题,请将调用包装在PrivilegedAction.

于 2013-03-25T06:50:32.673 回答