none
как в html указать ссылку на файл?

    Question

  • Привет! я диллетант в html.Мне нужно в тексте html страницы разместить ссылку на файл для скачивания.Я хочу чтобы после нажатия на эту ссылку браузер корректно все обработал и предложил сохранить файл на диск а не пытался бы открывать его и загружать его в браузер.Подскажите пожалуйста как это сделать правильно?
    Friday, May 10, 2013 8:03 PM

Answers

  • Одним только html тут обойтись не получится. Нужно привлекать сервер...

    Чтобы браузер мог сохранить любой файл (не открывая его) нужно передавать специальный http-заголовок.

    Вот пример кода контроллера в ASP.NET MVC, который формирует заголовок и отдает файл:

    	public class DownloadController : Controller
    	{
    		public void Index(String file)
    		{
    			Response.AppendHeader("Content-Disposition", "attachment; filename=" + file);
    			Response.WriteFile(@"files\" + file);
    		}
    	}

    Соответственно ссылка на файл будет такая:

    <a href="/download?file=text.txt">Скачать текстовый файл</a>

    Сам файл должен находится по следующему пути: <корень сайта>/files/text.txt

    Это конечно самый минимум действий, который нужно сделать, чтобы отдать файл клиенту. В рабочем коде нужно формировать гораздо больше заголовков и обеспечить безопасность с путями файлов. И при необходимости реализовать докачку файлов.

    Sunday, May 12, 2013 11:03 AM

All replies

  • Привет, это делается с помощью обычной ссылки (тэг <a>). То как обрабатывать контент приходящий с сервера  настраивается в браузере и вы не можете изменить эти настройки с помощью html разметки. Можно сохранять ссылки с помощью контекстного меню (Save As/Сохранить ссылку как) или архивировать файлы, которые вы хотите загружать пользователям, тогда в большинстве случаев поведение браузеров будет таким как вы хотите. 
    Saturday, May 11, 2013 10:25 AM
  • Одним только html тут обойтись не получится. Нужно привлекать сервер...

    Чтобы браузер мог сохранить любой файл (не открывая его) нужно передавать специальный http-заголовок.

    Вот пример кода контроллера в ASP.NET MVC, который формирует заголовок и отдает файл:

    	public class DownloadController : Controller
    	{
    		public void Index(String file)
    		{
    			Response.AppendHeader("Content-Disposition", "attachment; filename=" + file);
    			Response.WriteFile(@"files\" + file);
    		}
    	}

    Соответственно ссылка на файл будет такая:

    <a href="/download?file=text.txt">Скачать текстовый файл</a>

    Сам файл должен находится по следующему пути: <корень сайта>/files/text.txt

    Это конечно самый минимум действий, который нужно сделать, чтобы отдать файл клиенту. В рабочем коде нужно формировать гораздо больше заголовков и обеспечить безопасность с путями файлов. И при необходимости реализовать докачку файлов.

    Sunday, May 12, 2013 11:03 AM
  • Дмитрий, если использовать ваш способ, не проще ли заменять Header по расширению файла средствами Веб сервера? 
    Sunday, May 12, 2013 11:13 AM
  • Смысл в том, что http заголовки ответа формируются на сервере. А каким конкретным образом они там формируются, это уже вопрос второстепенный.

    Sunday, May 12, 2013 12:05 PM
  • Уважаемый пользователь, если ответы решают проблему не забывайте помечать их. Если нет, отпишитесь, не оставляйте топик без ответов.
    Monday, May 13, 2013 9:20 AM