Как я могу получить ссылку на файл, чтобы открыть указанный файл?

Я создаю файл PDF на странице Sharepoint; Поскольку я до сих пор не мог позволить пользователю выбрать место для посадки файла PDF (как об этом спрашивали здесь), я решил создать ссылку на файл на странице, надеясь, что при нажатии на ссылку откроется файл. Вот код:

        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);

Это создает ссылку просто отлично:

введите описание изображения здесь

... но при нажатии на ссылку файл не открывается. Или дать сообщение об ошибке; он просто сидит, как комок в болоте.

Чтобы убедиться, что это не имеет ничего общего с файлом 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;
}

... где сообщениегласит:"Доступ к пути" C:\Projects\DirectPaymentWebForm\tryopeningthis.txt "запрещен".

Путь / файл существует; почему бы мне не получить то же сообщение об ошибке с файлом pdf?!?

1 ответ

Решение

Это не проблема с файлом. Это из-за концепций безопасности. Любой файл, на который мы ссылаемся внутри наших веб-страниц, должен находиться в той же структуре каталогов. Если вы можете открыть инструменты разработчика с помощью опции F12 в браузере, вы можете увидеть некоторые ошибки консоли, говорящие

Не разрешается загружать локальный ресурс: "путь к вашему файлу"

Вы можете достичь этого двумя способами:

  1. попробуйте сгенерировать файл в структуре папок приложения
  2. создать кнопку ссылки и по нажатию этой кнопки отправить документ в виде потока для вывода

Надеюсь, это решит вашу проблему.

РЕДАКТИРОВАТЬ с подходом, упомянутым в пункте 1, вы можете использовать приведенный ниже код.

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

В пути к файлу не обязательно указывать file:/// text. Это работает

РЕДАКТИРОВАТЬ Вышеуказанный процесс делает файл для загрузки на самой текущей странице.

Чтобы загрузить файл в другое окно или как всплывающее окно, используйте

<a href="javascript:window.Open("<file name>");">link</a>
Другие вопросы по тегам