1

アプレットを使用したフォルダーのアップロードをサポートする必要があります。ユーザーのホーム ディレクトリを取得しようとするアプレットを実装し、そのフォルダの一時 zip ファイルを作成しようとすると、アップロード サーブレットにヒットします。実際には、zip ファイルの作成とアップロードは、JavaScript からアプレット メソッド uploadFolder の 1 つを呼び出すことによって開始されます。ユーザーのホーム ディレクトリに zip ファイルを作成しているときに、java.security.AccessControlException: アクセスが拒否されました (java.io.FilePermission C:\Documents and Settings\userhomedir\temp_timestamp.zip write)。

私が行った手順は次のとおりです。

ステップ1:

  1. uploadFolder メソッドとともにアップロード サーブレットにヒットする zip とファイルを作成するアプレットを作成しました。
  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 を使用することにしました。step1では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));

folderupload.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 に答える