2

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

4

1 回答 1

3

问题来自哈希 (#),因为这是 URL 中的一个非常特殊的字符。它不能轻易地翻译成特殊的 URL 编码形式,因为它是 URL 方案的有效字符并且在那里具有特殊含义。使用 ExtLib @EncodeUrl 函数也不起作用,因为这个函数会在该哈希前面切断您的字符串(我认为这是一个错误),导致您的服务器上不存在资源请求,从而导致 404。

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

  1. 获取附件名称
  2. 正确编码附件名称
  3. 计算相对于数据库的资源路径并添加编码的附件名称

假设您的数据源已命名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 中测试过那个,所以计算的路径在这里可能仍然不同。

于 2013-11-19T08:30:41.700 回答