【问题标题】:Find .xls file with an applet running in Plone使用在 Plone 中运行的小程序查找 .xls 文件
【发布时间】:2013-02-28 07:32:04
【问题描述】:

我正在开发一个在 Plone 网站内运行的 Applet。 在 Plone 管理的其中一个页面中,我必须运行这个小程序,它执行以下步骤:

  • 高级表单验证

  • 在服务器硬盘上获取一个 excel 模板,并将其复制并附加一些作为名称的数据(如 calcoloOneri.xls 变为 calcoloOneriJohnFileOne.xls)

  • 将表单数据写入新创建的文件中

  • 将此文件发送到我创建的用于将 excel 转换为 PDF 的 Web 服务

  • 让用户在他们的机器上下载 pdf

现在的问题是,因为我可能有多个不同网站的实例,只是名称和其他一些东西不同,我将我的小程序参数化为在每个不同的场景中运行。 我特别注意了 template.xls 文件的位置,该位置可能会根据站点结构/文件名的需要而有所不同。 加载小程序的代码如下(取自加载的页面):

<script src="http://www.java.com/js/deployJava.js"></script>
<script>var user='admin'</script>
<script>var comune='Andria'</script>
<script>var numPratica=''</script>
<script>var numPreinoltro='20482109022013'</script>
<script>var classifica=''</script>
<script>var numFascicolo=''</script>
<script>var annoFascicolo=''</script>
<script>var portalURL='http://xx.xx.xx.xx:xxxx/scia2'</script>
<script>
  var attributes = {code:'geotel.gui.Login.class', archive:'portal_url/++resource++java/GestioneOneri.jar, portal_url/++resource++java/mysql-connector-java-5.1.20-bin.jar, portal_url/++resource++java/poi-3.8-20120326.jar, portal_url/++resource++java/forms-1.3.0.jar', width:1024, height:700};
  var parameters = {jnlp_href:'portal_url/++resource++java/gestioneoneri.jnlp', nomeUtente:user, integrato:'true', portalUrl:portalURL, comune:comune, percorsoFileCalcoloOneri:'/++resource++java/', nomeFileCalcoloOneri:'calcoloOneri.xls', numPreinoltro:numPreinoltro, numPratica:numPratica, classifica:classifica, numFascicolo:numFascicolo, annoFascicolo:annoFascicolo};
  var version = '1.6';
  deployJava.runApplet(attributes, parameters, version);
</script>
<noscript>
Niente plugin java!
</noscript>

正如我从 Plone 文档中读到的,++resource++ 语法让 CMS 可以检索在 xml 注册表中注册的静态资源,并且我可以将它用于 plone .pt 文件。

所以,在阅读完所有内容后,我前往浏览器并写道:

http://xx.xx.xx.xx:xxxx/scia2/++resource++java/calcoloOneri.xls

Chrome 会下载文件 calcoloOneri.xls,所以我认为“我一定是在正确的轨道上”。

当我将这些值传递到我的小程序时,问题就出现了。首先,因为我可以有多个站点运行这个小程序,所以我将网站的地址作为参数(portalUrl)获取。为了检索 excel 文件的位置,我将 ++resource++java/calcoloOneri.xls 附加到门户 url,因为在浏览器中这个地址是正确的。

在我的 copyFile 方法中,我使用以下对象将 excel 模板复制到新模板中:

File f1 = new File(srFile); //srFile is "http://xx.xx.xx.xx:xxxx/scia2/++resource++java/calcoloOneri.xls"
File f2 = new File(dtFile);
InputStream in = new FileInputStream(f1);
OutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while((len = in.read(buf)) > 0)
{
   out.write(buf, 0, len);
}
in.close();
out.close();

我在我的皮肤上体验到 java.io.File 无法处理这种 url,我也无法在我的 applet 代码中使用 URL 或 URI 对象获取指向该文件的指针。

如何获取正确的字符串以将模板读入我的小程序?我错过了什么?

谢谢

【问题讨论】:

    标签: java resources applet plone


    【解决方案1】:

    您最好在 python 中使用 xlwt 库来修改 excel 文档。然后,它可以是一个简单的 Web 表单。 excel 模板可以是文件内容类型对象,因此您只需从那里对文件数据进行分级,而不是进行远程调用。

    否则,您可以采取的一种方法是硬编码 excel 模板文件的路径。

    如果您想从 url 下载文件,谷歌搜索可以提供帮助:http://cookbooks.adobe.com/post_Download_a_file_from_a_URL_in_Java-17947.html

    无论您如何解决它,在实施时都要小心,因为接受从互联网下载的用户提交的值可能很危险。

    【讨论】:

    • 您好,感谢您的回复。我不想在 python 中这样做,因为我需要执行已经在 J​​ava 小程序中实现的操作。问题不在于下载方法,我知道该怎么做,而在于从 ++resource++ 语法到硬盘上的完整标准路径的路径标识。我已经硬编码了路径,但是这样很容易出错..
    • 无法从正在运行的 python 服务器中从 Java 中的 ++resource++ 文件中获知文件系统路径。如果有,那将是一个安全风险。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多