Открыть файл в интрасети с другого сервера - ASP.Net C #

1

У меня проблема. Мой WebApp должен открыть файл из локального ресурса на другом сервере в браузере, и если он не поддерживается браузером, тогда откройте его с помощью связанной программы. Для примера используйте файлы PDF, DOCX, XLSX. Путь к этому серверу хранится в БД следующим образом: \ server2\folder\file.pdf

Я должен сказать, что я пробовал все, что мог найти, и я также не нашел там решения. Но мне действительно нужно понять это.

Мое приложение - ASP.Net AJAX, С# и компоненты Telerik

То, что я пробовал:

- <a href="\\server2\folder\file.pdf">link</a>
- <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Link") %>' Target="_blank">HyperLink</asp:HyperLink>
- Responce.Redirect(path)

Это не работает, и ответ от Chrome:

Не разрешено загружать локальный ресурс: файл://server2/folder/file.pdf

Там в любом случае?

edit - измененная спецификация проблемы

Теги:
hyperlink

3 ответа

0
Лучший ответ

Для тех, у кого такая же проблема, как у меня, есть мое решение.

Невозможно достичь этого. Поэтому мне пришлось создать новую страницу с параметром path с файлом. Затем создайте поток памяти и отправьте это клиенту.

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString.AllKeys.Contains("path"))
    {
        string path = Server.UrlDecode(Request.QueryString["path"]);
        if (!(new FileInfo(path).Exists))
            return;

        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                SetStream(fs);
            }
    }
}

private void SetStream(Stream stream)
{
    byte[] bytes = new byte[(int)stream.Length];
    stream.Read(bytes, 0, (int)stream.Length);
    Response.Buffer = true;
    Response.Clear();
    Response.AddHeader("content-disposition", "attachment; filename=" + Server.UrlDecode(Request.QueryString["name"]));
    Response.BinaryWrite(bytes);
    Response.Flush();
}
1

Если клиент получит доступ к этой ссылке вне вашей внутренней сети, вам нужно будет открыть файл на стороне сервера и передать его клиенту. Для этого потребуется привязка к новой странице в вашем серверном приложении с нужным вам способом, а затем с помощью этой новой страницы передать файл клиенту. Например, ваша ссылка будет выглядеть так:

<a href="/DownloadFile.aspx?path=\\server2\folder\file.pdf">Link</a>

Тогда в коде DownloadFile.aspx у вас будет что-то вроде этого:

var path = Request.QueryString["path"];
Response.WriteFile(path);
  • 0
    Спасибо за помощь. Это действительно открывает в браузере, но это на уровне персонажа. Мне нужно открыть как PDF, и если он не поддерживается браузером, то открыть его с помощью связанной программы ...
0

Укажите URL ресурса, подобный этому

 <a href="file://///server2/folder/file.pdf">link</a>
  • 0
    Это то же поведение, что и <a href="\\server2\folder\file.pdf"> ссылка </a>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню