从部分匹配中获取.pdf文件的Javascript

Javascript to get .pdf file from partial match

本文关键字:pdf 文件 Javascript 获取      更新时间:2023-09-26

这里的javascript新手在从web服务器获取部分匹配的.pdf文件时遇到问题。我制作了一个将数据输出到Web服务器的程序,其中一个组件是一个.pdf文件文件夹。我希望能够点击一个链接,根据生成的数据表中的值调出相应的.pdf文件(我使用的是slickgrid)。每个.pdf文件都包含数据表中的值,可以很好地查询.pdf文件夹,我用以下代码成功地获得了我想要的.pdfs:

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_aotherstring.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的方法可以做到这一点,但似乎找不到有效的方法。提前感谢!

如果没有服务器的支持,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];