У меня проблема. Мой 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 - измененная спецификация проблемы
Для тех, у кого такая же проблема, как у меня, есть мое решение.
Невозможно достичь этого. Поэтому мне пришлось создать новую страницу с параметром 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();
}
Если клиент получит доступ к этой ссылке вне вашей внутренней сети, вам нужно будет открыть файл на стороне сервера и передать его клиенту. Для этого потребуется привязка к новой странице в вашем серверном приложении с нужным вам способом, а затем с помощью этой новой страницы передать файл клиенту. Например, ваша ссылка будет выглядеть так:
<a href="/DownloadFile.aspx?path=\\server2\folder\file.pdf">Link</a>
Тогда в коде DownloadFile.aspx у вас будет что-то вроде этого:
var path = Request.QueryString["path"];
Response.WriteFile(path);
Укажите URL ресурса, подобный этому
<a href="file://///server2/folder/file.pdf">link</a>