在xpages中使用特殊字符上传文件

时间:2013-05-30 02:38:31

标签: xpages lotus-notes lotus-domino lotus xpages-ssjs

在Xpages上传控件中,我可以上传带有特殊字符的照片文件。但是在视图中,一些特殊字符变为下划线(例如。{#[to _],有些不是(如空格,+)。使用函数attachmentObject.getName()时,我可以获得带有特殊字符的原始文件名。因此,当我找回那种文件时,我遇到了问题。对我有什么建议吗?谢谢。

1 个答案:

答案 0 :(得分:2)

问题来自哈希(#),因为这是URL中非常特殊的字符。它不能轻易地转换为特殊的URL-Encoded表单,因为它是URL方案的有效字符,并且具有特殊含义。使用ExtLib @EncodeUrl函数也不起作用,因为这个会在你的哈希(我认为是一个bug)前面切断你的字符串,导致你的服务器上不存在的资源请求,从而导致404。

为了最终解决这个问题,我采用了一个我在2009年写回的旧函数(http://blog.gollmick.de/mgoblog.nsf/dx/some-more-Functions-for-XPages-URLEncode-URLDecode.htm) - 而且那个函数可以在你需要的时候完成:

  1. 获取附件名称
  2. 正确编码附件名称
  3. 计算相对于数据库的资源路径并添加编码的附件名称
  4. 假设您的数据源名为document1并且您在名为body的项目中有附件,并且您将使用该项目的第一个附件,则需要以下代码来计算正确的附件路径:

    function @URLEncode(encodeObject, encSch:String) {
        try {
                var encScheme = ((encSch) && (encSch !== null))?encSch:"UTF-8";
                return java.net.URLEncoder.encode(encodeObject.toString(),
                        encScheme);
        } catch (e) {
                print("ERROR in @URLEncode:" + e);
        }
        return null;
    }
    
    try {
    var list:java.util.List = document1.getAttachmentList("Body"),
        neo:NotesEmbeddedObject,
        size = list.size(),
        path = "";
    if (0 < size) {
        neo = list.get(0);
        path = "0/" + document1.getDocument().getUniversalID() + "/$file/" + @URLEncode(neo.getName());
    }
    return path;
    } catch (e) {
    print(e.toString());
    }
    

    您肯定需要根据需要修改此代码,但这应该为您提供正确的计算正确的Web路径的提示。我现在还没有在XPinC中测试过那个,所以计算出的路径在这里可能会有所不同。