Как я могу получить ссылку на файл, чтобы открыть указанный файл?
Я создаю файл 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, вы можете использовать приведенный ниже код.
<a href="<your file path>">link</a>
В пути к файлу не обязательно указывать file:/// text. Это работает
РЕДАКТИРОВАТЬ Вышеуказанный процесс делает файл для загрузки на самой текущей странице.
Чтобы загрузить файл в другое окно или как всплывающее окно, используйте
<a href="javascript:window.Open("<file name>");">link</a>