用web应用程序打包applet以访问loca文件系统的java步骤
我需要支持使用小程序上传文件夹。我已经实现了一个小程序,它将尝试获取一个用户主目录,并尝试为该文件夹创建一个临时zip文件,然后它将点击我的上传servlet。实际上,zip文件的创建和上传将通过从JavaScript调用其中一个小程序方法uploadFolder来启动。当我在用户主目录中创建zip文件时,我得到了一个java。安全AccessControlException:拒绝访问(java.io.FilePermission C:\Documents and Settings\userhomedir\temp_timestamp.zip write)
以下是我已经完成的步骤:
第一步:
- 创建了一个小程序来创建zip和文件,并与uploadFolder方法一起使用UploadServlet李>
- 为小程序项目创建了一个签名jar李>
html代码是
<Applet code="com.project.upload.FolderUploadApplet.class" name="uploadApp" archive="upload.jar" width="250" height="80" > </applet>
JavaScript代码是
window.alert(uploadApp.uploadFolder(destionationPath));
第二步:
在此之后,我浏览了一些论坛,并决定与JNLP一起使用JWS。在步骤1中,我能够使用JavaScript调用applet方法,但在使用JNLP时,我无法通过JavaScript调用applet方法。请查找以下代码片段:
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;
}
}
有谁能给我建议一种更好的方法来访问本地文件系统,并在我做错了什么的时候纠正我吗
# 1 楼答案
如果一个受信任的小程序被JS调用,它通常会变成沙盒。要绕过这个问题,请将调用包装为^{}