Javascript从部分匹配获得.pdf文件

时间:2013-02-10 23:39:55

标签: javascript jquery html regex

这里有完整且完整的javascript新手,并且基于部分匹配从Web服务器获取.pdf文件时出现问题。我制作了一个程序,将数据输出到网络服务器,其中一个组件是.pdf文件的文件夹。我希望能够点击一个链接,该链接将根据生成的数据表中的值提取相应的.pdf文件(我正在使用slickgrid)。每个.pdf文件都包含数据表中的值,并作为.pdf文件夹的良好查询,我已经成功地使用以下代码获取了我想要的.pdf文件:

var value = grid.getData().getItem(row)['data'];
var locpath = window.location.pathname.substring(0,window.location.pathname.lastIndexOf('/'));
var plotsFolder = window.location.protocol + "//" + window.location.host + locpath + "/CovPlots/";
var href = plotsFolder + value + ".pdf";
return "<a href='" + href + "'>" + value + "</a>";

这里的问题是,有时生成的.pdf文件是“数据”字符串中两个或更多(我看到最多4个)的串联,由“_”分隔为分隔符不值得进入。所以,如果.pdf文件是'somestring.pdf',我可以毫无问题地得到它。但是,如果.pdf文件是'somestring_anotherstring.pdf',如果我有'somestring'或'anotherstring'作为'data'的值,我无法弄清楚如何获取.pdf文件。

我已经尝试了很多不同的东西来获得某种查找,我可以使用它来根据部分匹配来下拉正确的文件。最新的尝试是使用javascript中的FilenameFilter对象,但是没有任何javascript知识,我很难让它工作。我尝试创建一个新函数,我可以将其称为.pdf URL的查找:

function lookup() {
    File directory = new File(plotsFolder);
    String[] myFiles = directory.list(new FilenameFilter() {
        public boolean accept(File directory, String fileName) {
        return fileName.match(value);
        }
    });
}

这似乎只是抛出一个错误。有人能指出我正确的方向,能够根据部分匹配下载正确的.pdf文件吗?我也试着看看是否有一种jquery方法可以做到,但似乎找不到有用的东西。提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果没有服务器的支持,JavaScript无法从部分文件名中找到文件。但是,你可以做的是在服务器上有一个小脚本来执行JavaScript的部分文件名匹配,然后JavaScript可以要求服务器进行匹配,然后当它返回匹配时,它可以使用那个文件名。

如果您不介意同时加载所有PDF的整个索引,可以使用这个小Python脚本以一种漂亮的,JavaScript友好的JSON格式生成索引:

#!/usr/bin/env python
# Create an index of a bunch of PDF files.
# Usage: python make_index.py directory_with_pdf_files

import os
import sys
import json


def index(directory):
    index = {}

    for filename in os.listdir(directory):
        base, ext = os.path.splitext(filename)
        if ext.lower() != '.pdf':
            continue
        for keyword in base.split('_'):
            index[keyword] = filename

    with open(os.path.join(directory, 'index.json'), 'w') as f:
        f.write(json.dumps(index))


if __name__ == '__main__':
    index(sys.argv[1])

然后你可以用jQuery或者你有什么来加载index.json。当您需要查找特定PDF的文件名时,您可以执行以下操作(假设从index.json加载的对象位于indexOfPDFs变量中):

var href = plotsFolder + indexOfPDFs[value];