如何获取文件链接以打开所述文件?

时间:2015-07-15 21:23:09

标签: c# file-io hyperlink sharepoint-2010

我在Sharepoint页面中生成PDF文件;因为我到目前为止无法让用户选择pdf文件的登陆点(如here所述),我决定在页面上创建一个指向该文件的链接,希望点击链接将打开文件。这是代码:

        String pdfFileID = GetYYYYMMDDAndUserNameAndAmount();
        String pdfFileName = String.Format("DirectPayDynamic_{0}.pdf", 
    pdfFileID);
        String fileFullpath 

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), pdfFileName); 
        String fileLinkBase = "Generated PDF: <a href=\"file:///{0}\">{1}</a>";
        String filelink = String.Format(fileLinkBase, fileFullpath, pdfFileName);
        File.WriteAllBytes(fileFullpath, bytes);
        AddVerticalSpace();
        var pdflink = new Label // would this be preferable: "LiteralControl pdflink = new LiteralControl();" ?
        {
            CssClass = "dplatypus-webform-field-label",
            Text = filelink
        };
        this.Controls.Add(pdflink);

这样可以很好地创建链接:

enter image description here

...但是点击该链接不会打开该文件。或者给出一个错误的消息;它只是像沼泽中的一块块一样坐在那里。

为了验证它与PDF文件没有关系,我尝试在路径中创建一个文本文件并访问它:

String pdfFileName = String.Format("DirectPayDynamic_{0}.pdf", pdfFileID);
pdfFileName = "czechitout.txt"; // Remove after testing

...但是,唉,同时点击“czechitout.txt”也没有做任何事情 - 记事本没有公开或完全表明其顽固不化的原因。

那么:如何在Sharepoint页面上获取链接以调用相关软件来运行引用的文件?

更新

注意:我愿意打开资源管理器,显示文件(通常用户会将其从一个地方复制到另一个地方)。

更新2

只需保存没有任何路径信息的文件,如下所示:

String pdfFileID = GetYYYYMMDDAndUserNameAndAmount();
String pdfFileName = String.Format("DirectPayDynamic_{0}.pdf", pdfFileID);
String fileLinkBase = "Generated PDF: <a href=\"file:///{0}\">{1}</a>";
String filelink = String.Format(fileLinkBase, pdfFileName, pdfFileName);
File.WriteAllBytes(fileFullpath, bytes);
AddVerticalSpace();
var pdflink = new Label // would this be preferable: "LiteralControl pdflink = new LiteralControl();" ?
{
    CssClass = "finaff-webform-field-label",
    Text = filelink
};
this.Controls.Add(pdflink);

当我将链接混搭时,我得到了“页面错误”

F12ing给了我低调/瘦/ buttlescut:

不允许加载本地资源:file:///DirectPayDynamic_20150717_clayshan_0.pdf

更新3

然后我尝试了保存到特定目录的建议(不使用花哨的“SpecialFolder”爵士乐,就像这样:

String pdfFileName = String.Format(@"C:\Projects\DirectPaymentWebForm\DirectPayDynamic_{0}.pdf", pdfFileID);

...但我的表现并不好(文件在那里,但试图通过链接调用它是一种无用的练习)。

更新4

我甚至尝试使用低文本文件de modo que:

String pdfFileName = @"C:\Projects\DirectPaymentWebForm\tryopeningthis.txt";

...但是我的抓住了:

catch (Exception ex)
{
    String exMsg = ex.Message;
}

...其中msg是,“访问路径'C:\ Projects \ DirectPaymentWebForm \ tryopeningthis.txt'被拒绝。

路径/文件确实存在;为什么我不能用pdf文件得到同样的错误消息?!?

1 个答案:

答案 0 :(得分:1)

这不是文件的问题。这是因为安全概念。 我们在网页中引用的任何文件都需要在相同的目录结构下。 如果您可以使用浏览器中的 F12 选项打开开发人员工具,则可以看到一些控制台错误

  

不允许加载本地资源:“您的文件路径”

你可以通过两种方式实现这一目标:

  1. 尝试将文件生成到应用程序文件夹结构
  2. 创建一个链接按钮,然后单击该按钮,将文档作为流发送到输出
  3. 希望这能解决你的问题。

    <强> 修改 使用第1点中提到的方法,您可以使用以下代码。

       <a href="<your file path>">link</a>
    

    在文件路径中,不需要提及file:/// text。 这有效

    <强> 修改 上面的过程使文件加载到当前页面本身。

    要在另一个窗口或弹出窗口中加载文件,请使用

    <a href="javascript:window.Open("<file name>");">link</a>